2017-08-14 18 views
0

XPathを使用してJCRからフォルダとその子孫を選択しようとしています。私もその子孫を選択することができます要素とその子孫を選択

//content/documents/folder-name 

//content/documents/folder-name//* 

しかし、私は両方を取得する方法を見つけ出すことができない私は簡単に十分なフォルダを選択することができます。私はいくつかのことを試しました。これらの選択は何も: ​​

はもちろん、私は、XPathでひどいよ:

//content/documents/folder-name | //content/documents/folder-name//* 
//content/documents/folder-name(. | *) 
//content/documents/folder-name/(. | *) 
//content/documents/folder-name/descendant-or-self 
//content/documents/folder-name/descendant-or-self::node() 

は、これらの両方javax.jcr.query.InvalidQueryException投げません。助けてください。

編集:代わりに/jcr:root/contentを使用することができなかったため、//という接頭辞を使用していました。私はそれと同じ問題を抱えています。

答えて

0

あなたはUNION演算子を使用して2つのXPath組み合わせることができます。しかし、あなたの最初のXPath、

//content/documents/folder-name 

は、要素の子孫が含まfolder-name要素(複数可)、選択し

xpath1 | xpath2 

を。

あなたは彼らの子孫が続き、リストの最初にあることをfolder-name要素をしたい場合は、次のように、あなたは組み合わせることができ:

//content/documents/folder-name | //content/documents/folder-name//* 
+0

'/ jcr:root/content/documents/folder-name |/jcr:root/content/documents/folder-name/* 'は何も選択しません。同様に '//content/documents/folder-name | // content/documents/folder-name // * 'となります。 '// content/documents/folder-name'には子孫は含まれません。 –

+1

サンプルXMLと、あなたがしようとしていることを知るために期待している正確な結果を投稿することをお勧めします。あなたのコメントのXPathには名前空間接頭辞が含まれるようになりました。これは、XMLを見ないと診断できない潜在的な問題の可能性のある別の原因です。 – kjhughes

+0

私はしたいと思うが、それはそれにNDAのものを持つ巨大なファイルです。私は数分で近くに何かをしようとします。 –

0

//content/documents/folder-name/descendant-or-self::node()は(あなたのXML入力を見ることなく)私には正しいよう、//content/documents/folder-name/descendant-or-self::*けれどもおそらく良いです。

確かに//content/documents/folder-nameが何かを選択すると、 ``// content/documents/folder-name/descendant-or-self :: * `も何かを選択する必要があります。

XPath 2.0では、//content/documents/folder-name/(.|descendant::*)を使用できますが、それよりも短くても、子孫または自軸を使用するよりも厄介です。

関連する問題