我正在使用javax.xml.xpath.XPath包来查找XML中存在的节点。 代码查找值并返回NodeList
NodeList nodes = (NodeList) xPath.compile("/books/book/category[1] | /books/book/category[2] | /books/book/category[3]").evaluate(xmlDocument,XPathConstants.NODESET);
我的示例XML是:
<books>
<book>
<name>abc</name>
<category>category1</category>
<isbn>152491915491444</isbn>
</book>
<book>
<name>pqr</name>
<isbn>1619126541625</isbn>
</book>
<book>
<name>xyz</name>
<category>category3</category>
<isbn>851926542599595</isbn>
</book>
</books>
我在NodeList中得到2个节点作为&#39;类别&#39;在XML的第二个节点中不存在。
那么无论如何识别我从NodeList获得的节点是我在xPath.compile中传递的xpath的结果吗?因为在这里无法识别价值&#39;类别3&#39;来自节点2或3.
或者无论如何都得到XML中的节点号,我得到了结果。在这个例子中,我应该得到节点1和3,因为我得到的类别来自XML的第1和第3个节点。
另一种方法是传递单个xpath而不是多个xpath。但是我不想使用这种方法,因为它很耗时,我必须处理很多这样的XML。
答案 0 :(得分:0)
我对此有一些评论。首先,我认为你正在使用错误的工具,取决于你想要的输出。其次,XML 1.0没有指定子元素的顺序。大多数解析器将按照指定的顺序返回元素,但它可能不同。
您可以使用以下xpath表达式获得与上面相同的结果:
/books/book/category
NodeList中的节点应该是正确的顺序。如果您需要知道这些元素出现在哪个索引中,那么您需要一个不同的工具,例如SAX解析器。使用Sax解析器,您将能够跟踪已解析的书籍元素的数量,从而为它们提供索引值。