我需要将xpath节点搜索限制为子树.我目前正在使用下面的方法,但它会在整个文档中搜索我是否给它提供文档或我要搜索的节点.
private NodeList findNodes(Object obj,String xPathString) throws ... {
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expression = xPath.compile(xPathString);
return (NodeList) expression.evaluate(obj, XPathConstants.NODESET);
}
Run Code Online (Sandbox Code Playgroud)
我现在使用的解决方案是创建新文档,附加节点并搜索新文档,然后合并.我想改进这个.可以吗?
我正在使用的XPath是//nodeName.
您需要区分 绝对和相对 XPath表达式.
好问题+1.
在XPath中,任何以表达式开头的表达式/都是绝对的XPath表达式.在完整的当前文档上评估绝对XPath表达式.
相反,在当前(上下文)节点之外评估相对 XPath表达式.
这解释了报告的问题://nodeName是一个绝对的XPath表达式.
你想要的是一个相对的XPath表达式,例如:
.//nodeName
Run Code Online (Sandbox Code Playgroud)