2011-12-20 7 views
0

すべてのリンクとタイトルを同時に配列リストに読みたいですか?Javaのすべての子要素がXMLで読み取る

<rootNode> 
    <image> 
     <link>http://imagelink/</link> 
     <title>This is the title</title> 
    </image> 
    <movie> 
     <link>http://movielink/</link> 
     <title>This is the title</title> 
    </movie> 
</rootNode> 

以下のコードはうまく動作しますが、異なる子ノードがあるとコードが大きくなりすぎる可能性があります。

私は複数を望みません、私はきれいに見えるものが欲しいです!

ArrayList XTimeStamp = new ArrayList(); 
    Node libraryTagNode, libraryDataNode; 
    Element libraryTagElement, libraryDataElement; 
    NodeList libraryTagList,libraryDataList; 

    try { 
     File file = new File("computer.txt"); 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(file); 
     doc.getDocumentElement().normalize(); 

     NodeList imageLst = doc.getElementsByTagName("image"); 
     NodeList movieLst = doc.getElementsByTagName("movie"); 

     for (int s = 0; s < imageLst.getLength(); s++) { 
      libraryTagNode=bookLst.item(s); 


      if (libraryTagNode.getNodeType() == Node.ELEMENT_NODE) { 

       libraryTagElement = (Element) libraryTagNode; 

       libraryTagList = libraryTagElement.getElementsByTagName("link"); 
       libraryDataElement = (Element) libraryTagList.item(0); 

       libraryDataList = libraryDataElement.getChildNodes(); 
       String timeStampX=libraryDataList.item(0).getNodeValue(); 

       libraryTagList = libraryTagElement.getElementsByTagName("title"); 
       libraryDataElement = (Element) libraryTagList.item(0); 

       libraryDataList = libraryDataElement.getChildNodes(); 
       String timeStampY=libraryDataList.item(0).getNodeValue(); 

       XTimeStamp.add(timeStampX+" "+timeStampY); 

      } 

     } 
    for (int s = 0; s < movieLst.getLength(); s++) { 
      libraryTagNode=bookLst.item(s); 


      if (libraryTagNode.getNodeType() == Node.ELEMENT_NODE) { 

       libraryTagElement = (Element) libraryTagNode; 

       libraryTagList = libraryTagElement.getElementsByTagName("link"); 
       libraryDataElement = (Element) libraryTagList.item(0); 

       libraryDataList = libraryDataElement.getChildNodes(); 
       String timeStampX=libraryDataList.item(0).getNodeValue(); 

       libraryTagList = libraryTagElement.getElementsByTagName("title"); 
       libraryDataElement = (Element) libraryTagList.item(0); 

       libraryDataList = libraryDataElement.getChildNodes(); 
       String timeStampY=libraryDataList.item(0).getNodeValue(); 

       XTimeStamp.add(timeStampX+" "+timeStampY); 

      } 

     } 
+0

あなたの質問は不明です。ノードを訪問する順序を示すために編集してください。 –

+0

XPathの使用に切り替えることはできますか? –

答えて

0

2つのループを1つに何とかしたいと思っています。今のようにそれを行うのは確かに面倒な方法です。

答えはXPathを使用することです。私はあなたのが<link>要素を持っている<title>要素を検索することを提案します。

0

あなたの求めて何のわからない100%を参照してくださいしかし、あなたは別のノードリストでのNodeListのすべてのリンクノードおよびすべてのタイトルノードを取得したい場合は、XPathを試みることができます"// link"と "// title"をXPath式として使用

関連する問題