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 的第二个节点中不存在“类别”。

那么有没有办法识别我从 NodeList 获得的节点是我在 xPath.compile 中传递的 xpath 的结果?因为在这里无法识别值 'category3' 来自节点 2 或 3。

或者无论如何要在 XML 中获取节点号,我从中得到结果。在这个例子中,我应该得到节点 1 和 3,因为我得到的类别来自 XML 的第一个和第三个节点。

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

4

1 回答 1

0

我对此有几点意见。首先,我认为你使用了错误的工具来完成这项工作,这取决于你想要的输出是什么。其次是 XML 1.0 没有指定子元素的顺序。大多数解析器将按照指定的顺序返回元素,但可能会有所不同。

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

/books/book/category

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

于 2018-03-02T17:03:31.780 回答