2017-05-10 10 views
0

XML DOMパーサーを使用してXMLの主な要素を解析できます。たとえば、getElementsByTagName( "id")やgetElementsByTagName( "stock_number")などを取得できます私は問題に遭遇しました。なぜなら、タグでは、の情報だけを返す必要があるからです。java DOM XML Parserインナーエレメント

私はこのようなファイルのXML feed.xmlあります

<inventory> 
    <item UnitID="1234" Record="0"> 
     <id>1234</id> 
     <dealerid>455</dealerid> 
     <stock_number>1600Xtreme</stock_number> 
     <make>Nvidia</make> 
     <noteshtml>This is some random info about the product1234.<br><br> 
     Buy with trust from a LQZ dealership.<br><br> Contact&nbsp;Dave at 
     Burnaby location - 604 123 4578.<br> 
     </noteshtml> 
     <images> 
      <Image1 image="1" UnitID="1234"> 
       https://anydomain.com/photo54.jpg 
      </Image1> 
      <Image2 image="2" UnitID="1234"> 
       https://anydomain.com/photo22.jpg 
      </Image2> 
      <Image3 image="3" UnitID="1234"> 
       https://anydomain.com/photo32.jpg 
      </Image3> 
     </images> 
    </item> 
    <item UnitID="7854" Record="1"> 
     <id>7854</id> 
     <dealerid>587</dealerid> 
     <stock_number>12TMAX5500</stock_number> 
     <make>Realtek</make> 
     <noteshtml>This is some random info about the product 7854.<br><br> 
     Buy with trust from a LQZ dealership.<br><br> Contact&nbsp;Dave at 
     Burnaby location - 604 123 4578.<br> 
     </noteshtml> 
     <images> 
      <Image1 image="1" UnitID="7854"> 
       https://anydomain.com/photo656.jpg 
      </Image1> 
      <Image2 image="2" UnitID="7854"> 
       https://anydomain.com/photo6565.jpg 
      </Image2> 
      <Image3 image="3" UnitID="7854"> 
       https://anydomain.com/photo908.jpg 
      </Image3> 
     </images> 
    </item> 
</inventory> 

そして、これは、一般的には、私がこれまでに得たもののために私のJavaコードです:

File fXmlFile=new File("feed.xml"); 
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder(); 
Document doc=dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 
NodeList nList=doc.getElementsByTagName("item"); 
for (int temp=0; temp < nList.getLength(); temp++) 
{ 
    Node nNode=nList.item(temp); 
    Element eElement2=(Element)nNode; 
    int search=1234; 
    System.out.println("This is the value to search from my variable: " + search); 
    int toTest=Integer.parseInt(eElement2.getAttribute("UnitID")); 
    System.out.println("toTest is equal to: " + toTest); 
    if (toTest == search) 
    { 
     System.out.println("stock Number: " + eElement2.getElementsByTagName("stock_number").item(0).getTextContent()); 
    } 
} 

を私の質問は、今イメージタグの中に入り、そのイメージのURL = 1識別子だけを表示する方法です。

私は多くを検索し、DOMパーサの使い方を研究しました。ノードのサブ要素を作成しようとしましたが、エラーが発生します。 あなたの答えに感謝します。

答えて

0

イメージタグ内の子を取得するには、画像タグのgetChildNodesを直接呼び出すことはできません。ノードが追加されているため、java xml cast Node to Elementを参照してください。 したがって、getElementsByTagNameによって直接子を取得しようとします。

File fXmlFile=new File("feed.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 
NodeList nList = doc.getElementsByTagName("item"); 
for (int temp = 0; temp < nList.getLength(); temp++) { 
    Node nNode = nList.item(temp); 
    Element eElement2 = (Element) nNode; 
    int search = 1234; 
    System.out.println("This is the value to search from my variable: " + search); 
    int toTest = Integer.parseInt(eElement2.getAttribute("UnitID")); 
    System.out.println("toTest is equal to: " + toTest); 
    if (toTest == search) { 
     System.out.println(
       "stock Number: " + eElement2.getElementsByTagName("stock_number").item(0).getTextContent()); 
     Element images = (Element) eElement2.getElementsByTagName("images").item(0); 
     Element image1Node = (Element) images.getElementsByTagName("Image1").item(0); 
     Element image2Node = (Element) images.getElementsByTagName("Image2").item(0); 
     Element image3Node = (Element) images.getElementsByTagName("Image3").item(0); 
     if (image1Node.getAttribute("image").equals("1")) { 
      System.out.println("image1Node id attribute is 1"); 
     } 
     if (image2Node.getAttribute("image").equals("1")) { 
      System.out.println("image2Node id attribute is 1"); 
     } 
     if (image3Node.getAttribute("image").equals("1")) { 
      System.out.println("image3Node id attribute is 1"); 
     } 
    } 
}