使用XPATH解析XML
问题描述:
我有下面的XML。当topping id = '5002'
时,我想检索item id
和batters
。请帮助。使用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++;
}
}
答
我假设你想item id
和batters
那么你可以使用以下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
谢谢。这个表达式帮助我//项目[顶部[@ id ='5002']] –
您的要求是不明确的。你想'item id = 0001'和你的xpath结果中的所有'batter'元素? – SomeDude