2016-09-22 7 views
0

私は以下のXMLを持っています。 topping id = '5002'の場合は、item idbattersを検索したいと思います。親切に助けてください。XPATHを使用してXMLを解析するには

<?xml version="1.0" encoding="utf-8"?> 
    <items> 
     <item id="0001" type="donut"> 
      <name>Cake</name> 
      <ppu>0.55</ppu> 
      <batters> 
       <batter id="1001">Regular</batter> 
       <batter id="1002">Chocolate</batter> 
       <batter id="1003">Blueberry</batter> 
       <batter id="1003">Devil's Food</batter> 
      </batters> 
      <topping id="5001">None</topping> 
      <topping id="5002">Glazed</topping> 
      <topping id="5005">Sugar</topping> 
      <topping id="5007">Powdered Sugar</topping> 
      <topping id="5006">Chocolate with Sprinkles</topping> 
      <topping id="5003">Chocolate</topping> 
      <topping id="5004">Maple</topping> 
     </item> 
    </items> 

これは私のコードですが、アイテムIDとバーターを取得できません。

String expression1 = "/items/item/topping[@id='5002']"; 
NodeList nodeList1 = (NodeList) xPath.compile(expression1).evaluate(doc, XPathConstants.NODESET); 

for (int i = 0; i < nodeList1.getLength(); i++) { 
    Node nNode = nodeList1.item(i); 

    System.out.println("\nCount :"+count); 

    if (nNode.getNodeType() == Node.ELEMENT_NODE) 
    { 
     Element eElement = (Element) nNode; 
     System.out.println("Item ID : "+ eElement.getAttribute("id")); 
     //System.out.println("Item Name : "+ eElement.getElementsByTagName("name").item(0).getTextContent()); 
       //System.out.println("Item PPU : "+ eElement.getElementsByTagName("ppu").item(0).getTextContent()); 
       //System.out.println("Item Batters : "+ eElement.getElementsByTagName("batters").item(0).getTextContent()); 
       System.out.println("Item Topping : "+ eElement.getTextContent()); 
       count++; 
    } 
} 
+0

あなたの要件が明確ではありません。 'item id = 0001'と、あなたのxpathの結果にあるすべての' batter'要素を欲しいですか? – SomeDude

答えて

0

は、私はあなたがitem idbattersは、あなたが次のXPathを使用することができますしたいと仮定します。

//topping[contains(@id,'5002')]/parent::* | //topping[contains(@id,'5002')]/preceding-sibling::*/batter

Javaコードは次のようになります。

String expression1 = "//topping[contains(@id,'5002')]/parent::* | //topping[contains(@id,'5002')]/preceding-sibling::*/batter"; 

NodeList nodeList1 = (NodeList) xpath.compile(expression1).evaluate(doc, XPathConstants.NODESET); 

for (int i = 0; i < nodeList1.getLength(); i++) 
{ 
     Node nNode = (Node) nodeList1.item(i); 

     if (nNode.getNodeType() == Node.ELEMENT_NODE) 
     { 
      Element eElement = (Element) nNode; 
      if (eElement.getNodeName().equals("item")) 
      { 
       System.out.println("Item ID : "+ eElement.getAttribute("id")); 
      } 
      else if (eElement.getNodeName().equals("batter")) 
      { 
       System.out.println("Batter : " + eElement.getTextContent()); 
      } 

     } 
} 
+0

ありがとうございます。この表現は私を助けました// item [topping [@ id = '5002']] –

関連する問題