Java XPath:迭代节点及其索引的集合

时间:2013-06-27 14:36:01

标签: 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 表达式(我在运行时从配置文件加载),以便最小化非泛型代码,所以我不想把索引视为特例。

2 个答案:

答案 0 :(得分:2)

你必须使用像计算前面的兄弟姐妹那样的技巧

count(preceding-sibling::person)

,第一个person为0,第二个为1,等等。

答案 1 :(得分:0)

尝试使用 position()

String index  = xpath.compile("position()").evaluate(node).trim();