2011-12-02 64 views
10

我需要将xpath节点搜索限制为子树。我目前正在使用下面的方法,但它会在整个文档中搜索关于我是否给它的文档或我想要搜索的节点。子树上的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

+2

告诉我们您正在使用 – soulcheck

+0

中的XPath我相信限制将在XPath表达式来进行。 – McDowell

+0

我在编辑中添加了xpath。 –

回答

13

你找上了//轴,这意味着“文档根目录的任何后代节点”,

将其更改为.//轴(上下文节点的descendands),并预期它会奏效。

2

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

8

您需要一个绝对相对XPath表达式之间进行区分。

好问题+1。

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

相比之下,相对从当前(上下文)节点评估XPath表达式。

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

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

.//nodeName