我有以下常规XML
文件:
<root>
<Items>
<Item>
<tag1>text1</tag1>
<tag2>text2</tag2>
<tag3>text3</tag3>
</Item>
<Item>
<tag1>text1</tag1>
<tag2>text4</tag2>
<tag3>text5</tag3>
</Item>
</Items>
</root>
我想获取文本等于的所有节点(全部<Item>
),然后打印其所有其他标签。<tag1>
text1
<tag2>
我从这开始,但是努力寻找TODO'S的答案:
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(("\URI\file.xml"));
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
//TODO: Is this correct query?
XPathExpression expr = xpath.compile("//root//Items//Item//tag1[contains(., 'text1')]");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i=0; i<nl.getLength(); i++) {
//TODO: How to iterate over all matched <Item> and get their <tag2>, <tag3> etc.?
}
} catch (Exception e) {e.printStackTrace();}
谢谢,
您可以使用Chrome开发者工具$x("path")
功能来测试XPath。真的很简单。它也适用于最新的Firefox。
我用您提供的文本制作了一个HTML文件,然后在Chrome中打开了它。在控制台中,键入$x("/some-path")
以测试内容。
获取物品:
//Item
其中tag1文本等于text1:
//Item/tag1[.='text1']
获得以下是tag2的同级兄弟:
//Item/tag1[.='text1']/following-sibling::tag2
如果您想要商品而不是tag2:
//Item[ ./tag1[.='text1']/following-sibling::tag2 ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句