我有这个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 表达式(我在运行时从配置文件加载),以便最小化非泛型代码,所以我不想把索引视为特例。
答案 0 :(得分:2)
你必须使用像计算前面的兄弟姐妹那样的技巧
count(preceding-sibling::person)
,第一个person
为0,第二个为1,等等。
答案 1 :(得分:0)
尝试使用 position()
String index = xpath.compile("position()").evaluate(node).trim();