我需要将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);
}
我现在使用的解决方案是我创建新文档,追加节点并搜索新文档,然后合并。我想改进这个。可以吗?
我使用的XPath是//nodeName
。
答案 0 :(得分:16)
您正在查看//轴,这意味着'文档根的任何后代节点',
将其更改为.// axis(上下文节点的后代),它将按预期工作。
答案 1 :(得分:8)
您需要区分 绝对和相对 XPath表达式。
好问题+1。
在XPath中,任何以/
开头的表达式都是绝对XPath表达式。在完整的当前文档上评估绝对XPath表达式。
相比之下,相对 XPath表达式在当前(上下文)节点之间进行评估。
这解释了报告的问题://nodeName
是一个绝对的XPath表达式。
你想要的是一个相对的XPath表达式,例如:
.//nodeName
答案 2 :(得分:2)
.//nodeName
将在给定的上下文节点中的任何位置搜索nodeName
元素。