2011-12-02 68 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