XPath:从另一个路径引用一个节点

时间:2014-11-18 15:51:42

标签: xpath saxon

我正在遍历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 个答案:

答案 0 :(得分:1)

您可以使用表达式/root/authors/author[id=$XXX/author]/name并使用API​​将值(节点)绑定到变量$ XXX。使用s9api接口,您将使用XPathEvaluator.setVariable(new QName('XXX'),node)其中node是从先前的XPath评估返回的XdmNode。