Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子树上的xpath搜索_Java_Xml_Xpath - Fatal编程技术网

Java 子树上的xpath搜索

Java 子树上的xpath搜索,java,xml,xpath,Java,Xml,Xpath,我需要将xpath节点搜索限制为子树。我目前正在使用下面的方法,但它会搜索整个文档,以防我给它指定要搜索的文档或节点 private NodeList findNodes(Object obj,String xPathString) throws ... { XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression expression = xPath.compile(xPathString);

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

您看到的是
//
轴,它表示“文档根目录的任何后代节点”


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

//nodeName
将在给定上下文节点内的任何位置搜索
nodeName
元素。

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

好问题+1

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

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

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

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

.//nodeName

向我们展示您正在使用的xpath我认为必须在xpath表达式中进行限制。