我正在遍历XML文档并通过XPath表达式(使用Java中的Saxon 9)提取各种信息。在通过一个元素下的节点时,我需要从另一个元素引用一个节点。在下面的示例中,对于每个/ root / books / book,我想获得对/ root / authors / author / name的引用,该引用与book中的author元素具有相同的id。
我想的是像/ root / authors / author [id = XXX / author] / name这样的地方,其中XXX指的是"当前节点"我正在评估。这是我无法弄清楚的XXX位。有什么帮助吗?
<root>
<authors>
<author>
<id>001</id>
<name>Bob</name>
</author>
<author>
<id>002</id>
<name>Jane</name>
</author>
</authors>
<books>
<book>
<name>My Book</name>
<author>001</author>
</book>
</books>
</root>
这是代码段。首先我得到一个节点列表,然后我循环遍历这些节点并为每个节点评估一组表达式。
NodeList nl = (NodeList) xpath.evaluate(loopExpr, doc, XPathConstants.NODESET);
for (int i = 0; i < nl.getLength(); i++) {
Node currentNode = nl.item(i);
for (String field : fields) {
XPathExpression xe = expr.get(field);
String value = xe.evaluate(currentNode);
imp.add(value);
}
}
答案 0 :(得分:1)
您可以使用表达式/root/authors/author[id=$XXX/author]/name
并使用API将值(节点)绑定到变量$ XXX。使用s9api接口,您将使用XPathEvaluator.setVariable(new QName('XXX'),node)其中node是从先前的XPath评估返回的XdmNode。