Java XPath : iterating over a collection of nodes and their indices

标签 java xpath

我有这个 XML 实例文档:

<entities>
    <person>James</person>
    <person>Jack</person>
    <person>Jim</person>
</entities>

通过以下代码,我迭代人员节点并打印他们的名字:

XPathExpression expr = xpath.compile("/entities/person");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0 ; i < nodes.getLength() ; i++) {
    Node node = nodes.item(i);
    String nodeName = node.getNodeName();
    String name  = xpath.compile("text()").evaluate(node).trim();
    System.out.printf("node type = %s, node name = %s\n", nodeName, name);
}

现在我想要的是还可以访问每个节点的索引。

我知道我可以轻松地从 i 循环变量中获取它,但我想将其作为 XPath 表达式获取,最好以与我获取的方式没有不同的方式text() XPath 表达式的值。

我的用例是,我试图处理我作为 XPath 表达式(我在运行时从配置文件加载)收集的所有属性,以便最大限度地减少非通用代码,所以我不想将索引视为特殊情况。

最佳答案

你必须使用一个技巧,比如计算前面的 sibling

count(preceding-sibling::person)

第一个人的值为 0,第二个人的值为 1,依此类推。

关于Java XPath : iterating over a collection of nodes and their indices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346078/

相关文章:

java - InternalResourceViewResolver 和 Winstone 的问题

java - 模拟 TCP 发送中的背压

xml - 如何选择具有特定属性的所有元素?使用 TinyXPath

java - 是否可以在不更改方法主体的情况下编译通用可变参数方法?

java - 为什么不打印异常?

xpath - 如果 XML 文件具有不同 namespace 中的元素,则使用 XMLTasks 的 ant 的 XMLPath 无法匹配

java - 获取没有标识符的数据

php - PHP DOMXPath问题

python - 如何使用 div 中的 id 和 class 在 selenium python 中查找元素

java - 我想在媒体播放器中自动播放下一首歌曲