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

私たちにあなたが、私は制限がXPath式で行わなければならないと信じて – soulcheck

+0

を使用しているXPathを示しました。 – McDowell

+0

私は編集でxpathを追加しました。 –

答えて

13

変更それが軸(コンテキストノードのdescendandsを).//すると期待どおりに動作します。

2

.//nodeNameは、指定されたコンテキストノード内の任意の場所にあるnodeName要素を検索します。

8

あなたは絶対相対XPath式を区別する必要があります。

良い質問+1。

XPathでは、/で始まる式はすべて、絶対XPath式です。完全なXPath式は、の現在のドキュメントで評価されます。

対照的に、相対 XPath式は現在の(コンテキスト)ノードで評価されます。

これは、報告された問題を説明しています//nodeNameは絶対XPath式です。何をしたい

は、次のような、相対的なXPath式です:

.//nodeName