首页 文章

在Java中传递多个xpath时,在NodeList中查找节点号

提问于
浏览
0

我正在使用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个节点,因为“类别”在XML的第2个节点中不存在 .

那么无论如何识别我从NodeList获得的节点是我在xPath.compile中传递的xpath的结果吗?因为这里不可能识别值'category3'来自节点2或3 .

或者无论如何都得到XML中的节点号,我得到了结果 . 在这个例子中,我应该得到节点1和3,因为我得到的类别来自XML的第1和第3个节点 .

另一种方法是传递单个xpath而不是多个xpath . 但我不想使用这种方法,因为它很耗时,我必须处理很多这样的XML .

1 回答

  • 0

    我对此有一些评论 . 首先,我认为你正在使用错误的工具,取决于你想要的输出 . 其次,XML 1.0没有指定子元素的顺序 . 大多数解析器将按照指定的顺序返回元素,但它可能会有所不同 .

    您可以使用以下xpath表达式获得与上面相同的结果:

    /books/book/category
    

    NodeList中的节点应该是正确的顺序 . 如果您需要知道这些元素出现在哪个索引中,您将需要一个不同的工具,例如SAX解析器 . 使用Sax解析器,您将能够跟踪已解析的书籍元素的数量,从而为它们提供索引值 .

相关问题