Java XPath - 限制范围 - Saxon s9api

Java XPath - Limit Scope - Saxon s9api

我正在使用 Saxon 的 s9api 包进行 XPath 查找。

我想将搜索限制为仅 1 个节点及其后代。

<root>
    <b>
        <a>foo</a>
    </b>
    <b>
        <a>bar</a>
    </b>
</root>

我作为 XdmNode (bNode) 被传递 /root/b[2],我正在尝试在其下搜索。

XPathSelector selector = new Processor(false).newXPathCompiler().compile(xPath).load();
selector.setContextItem(bNode);
selector.evaluate()

但我总是从文档根目录获得结果!

我尝试了以下 XPath:

  1. /b/a -> Returns 无
  2. b/a -> Returns 无
  3. ./b/a -> Returns 无
  4. //b/a -> Returns 两个元素

注意:我知道我可以获得传递的 XdmNode 的索引并将其放入我的 XPath 中。但我想从给定的 XdmNode 进行搜索,以便可以对任何文档中的任何节点进行搜索,而且我不必担心该节点是如何找到的。

在我的代码中是这样的:

XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(path);
NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);

最后一行很有趣。

我不确定这是否是撒克逊 and/or 的正确版本。可能会试一试:)

试试 ./aa。上下文已经引用 b,因此您的 XPath 编号 3 会错误地尝试查找不存在的嵌套 b