子树上的 xpath 搜索

2022-09-03 04:25:42

我需要将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


答案 1

您正在查看轴,这意味着“文档根的任何后代节点”,//

将其更改为轴(上下文节点的降序),它将按预期工作。.//


答案 2

您需要区分绝对相对 XPath 表达式

好问题 +1.

在 XPath 中,任何以 开头的表达式都是绝对 XPath 表达式。在完整的当前文档上计算绝对 XPath 表达式。/

相比之下,相对 XPath 表达式是在当前(上下文)节点之外计算的。

这解释了报告的问题:是一个绝对的 XPath 表达式。//nodeName

您需要的是相对 XPath 表达式,例如:

.//nodeName

推荐