首页 文章

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

提问于
浏览
0

我正在遍历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 回答

  • 1

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

相关问题