2017-08-14 6 views
0

Ich versuche, einen Ordner und seine Nachkommen aus einem JCR mit XPath auszuwählen. Ich kann den Ordner leicht genug, um wählen:Element auswählen und seine Nachkommen

//content/documents/folder-name 

Ich kann seine Nachkommen wählen zu:

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

aber ich kann nicht herausfinden, wie beide zu bekommen. Ich habe mehrere Dinge ausprobiert. Diese wählen Sie nichts:

//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() 

Diese beiden werfen ein javax.jcr.query.InvalidQueryException:

//content/documents/folder-name[. | *] 
//content/documents/folder-name/[. | *] 

Natürlich bin ich schrecklich XPath. Bitte helfen Sie.

Edit: Ich habe die // Vorwahl verwendet, weil ich nicht wusste, dass ich stattdessen /jcr:root/content verwenden könnte. Ich habe jedoch das gleiche Problem damit.

Antwort

0

Sie zwei XPaths kombinieren die Vereinigung Operator:

xpath1 | xpath2 

jedoch Ihre erste XPath,

//content/documents/folder-name 

nicht wählen Sie das folder-name Element (e), die die Nachkommen des Elements enthält .

Wenn Sie die folder-name Elemente wollen in einer Liste zuerst sein, von deren Nachkommen gefolgt, können Sie wie folgt kombinieren:

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

'/ jcr: root/content/Dokumente/Ordnername |/jcr: root/content/documents/Ordnername/* 'wählt nichts aus. Ebenso für '// content/documents/folder-name | // Inhalt/Dokumente/Ordnername // * '. '// content/documents/ordnername' enthält keine Nachkommen. –

+1

Vielleicht sollten Sie die Beispiel-XML-Datei und die genauen Ergebnisse, die Sie erwarten, veröffentlichen, damit wir wissen, was Sie zu tun versuchen. Die XPaths in Ihrem Kommentar enthalten jetzt Namespace-Präfixe. Dies ist eine weitere mögliche Quelle für potenzielle Probleme, die wir ohne Ihr XML nicht diagnostizieren können. – kjhughes

+0

Ich würde gerne, aber es ist eine riesige Datei mit NDA Zeug drin. Ich werde versuchen, etwas zu schließen, wenn ich ein paar Minuten habe. –

0

//content/documents/folder-name/descendant-or-self::node() mir korrekt aussieht (ohne die XML-Eingabe zu sehen), obwohl //content/documents/folder-name/descendant-or-self::* ist wahrscheinlich besser.

Sicher, wenn //content/documents/folder-name etwas auswählt, dann sollte `` // content/documents/ordnername/abcendant-or-self :: * `auch etwas auswählen.

In XPath 2.0 können Sie //content/documents/folder-name/(.|descendant::*) tun, aber obwohl es kürzer ist, scheint es mir unhandlicher als die Verwendung der Nachkommen-oder-Selbst-Achse.

Verwandte Themen