Java XPath-限制范围-Saxon s9api
我正在使用Saxon的s9api包进行XPath查找 我想将搜索限制为仅搜索1个节点及其子节点Java XPath-限制范围-Saxon s9api,java,xml,xpath,saxon,Java,Xml,Xpath,Saxon,我正在使用Saxon的s9api包进行XPath查找 我想将搜索限制为仅搜索1个节点及其子节点 <root> <b> <a>foo</a> </b> <b> <a>bar</a> </b> </root> 但我总是从文档根目录中获取结果 我尝试了以下XPath: /b/a->不返回任何内容 b/a->不返回任何内
<root>
<b>
<a>foo</a>
</b>
<b>
<a>bar</a>
</b>
</root>
但我总是从文档根目录中获取结果
我尝试了以下XPath:
注意:我知道我可以获得传递的XdmNode索引并将其放入XPath中。但是我希望从给定的XdmNode进行搜索,这样就可以对任何文档中的任何节点进行搜索,而不必担心如何找到该节点。在我的代码中,它是这样的:
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(path);
NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);
最后一行是有趣的一行
我不确定这是否是撒克逊和/或正确的版本。可以试一试:)试试
/a
或者干脆a
。上下文已经引用了b
,因此XPath编号3会错误地尝试查找不存在的嵌套b
。两者都起作用。非常感谢。在这里,我认为我的问题在于Java/Saxon,而不是XPath/为了进一步说明这一点:以“/”开头的路径表达式搜索包含上下文项的文档,而不是以上下文项为根的子树。要搜索以上下文项为根的子树,它应该以“/”开头(或仅以axis步骤开头)。我使用Saxon,因为它支持高达3.1版的XPath。
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(path);
NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);