我正在遍历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);
}
}
1 回答
您可以使用表达式
/root/authors/author[id=$XXX/author]/name
并使用API将值(节点)绑定到变量$ XXX . 使用s9api接口,您将使用XPathEvaluator.setVariable(new QName('XXX'),node),其中node是从先前XPath评估返回的XdmNode .