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:
- /b/a -> Returns 无
- b/a -> Returns 无
- ./b/a -> Returns 无
- //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 的正确版本。可能会试一试:)
试试 ./a
或 a
。上下文已经引用 b
,因此您的 XPath 编号 3 会错误地尝试查找不存在的嵌套 b
。
我正在使用 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:
- /b/a -> Returns 无
- b/a -> Returns 无
- ./b/a -> Returns 无
- //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 的正确版本。可能会试一试:)
试试 ./a
或 a
。上下文已经引用 b
,因此您的 XPath 编号 3 会错误地尝试查找不存在的嵌套 b
。