0

我有这个 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表达式(我在运行时从配置文件加载)处理,以便最小化非通用代码,所以我不想处理索引作为特例。

4

2 回答 2

2

您必须使用诸如计算前面的兄弟姐妹之类的技巧

count(preceding-sibling::person)

第一个为 0,person第二个为 1,依此类推。

于 2013-06-27T15:00:12.340 回答
0

尝试使用位置()

String index  = xpath.compile("position()").evaluate(node).trim();
于 2013-06-27T14:51:51.367 回答