X-Path

Beispiele

Absolute Pfade (oben beginnend)
/AA
/AA/bb
Der Pfad der Ergebnisknoten muss exakt dem gewünschten entsprechen /bezirk/gewässer/fluss
Beliebige Ebene (oben / in der Mitte beginnend)
//AA
//AA/bb
Der Pfad der Ergebnisknoten muss wie der gewünschte enden. Zusätzliche Eltern sind erlaubt. //fluss/gemeinden/gemeinde
Variable Eltern/Kinder
/* Alle Knoten auf der obersten Ebene. Wobei Alle aufgrund der XML-Definition nur einer ist (Dokumentelement). /*
/*/*/* Alle Knoten auf der dritten Ebene. /*/*/*
//* Jeder einzelne Knoten, egal auf welcher Ebene. //*
/AA/* Alle Kinder von AA (nicht aber Kindeskinder) /bezirk/gewässer/*
/AA//* Alle Kinder von AA inklusive Kindeskinder /bezirk/gewässer//*
*/*/AA Enkel (2. Tiefe) namens AA des aktuellen Elements
Element-Position
AA/BB[3] Der dritte BB-Knoten in einem AA-Knoten. gemeinden/gemeinde[3]
gewässer/fluss[2]/gemeinden
AA/BB[last()] Die letzten BB-Knoten in allen AA-Knoten. gemeinden/gemeinde[last()]
AA/BB[last()-2] Die dritt-letzten BB-Knoten in allen AA-Knoten. gemeinden/gemeinde[last()-2]
AA/BB[position()=3] Mittels position() kann die Elementposition auch in komplexeren Ausdrücken verwendet werden. Das Beispiel rechts findet jede dritte Gemeinde. Achtung der Operator mod funktioniert besser wenn die Zählung mit 0 beginnt. gemeinden/gemeinde[(position()-1) mod 3 = 0]
Attribute
//AA/@key Alle key-Attribute von AA-Elementen //gemeinde/@flaeche
//AA[@key] Alle AA-Elemente mit einem key-Attribute //gemeinde[@stadt]
//AA[@abc|@def|...] Alle AA-Elemente mit eines der gelisteten Attribute haben //gemeinde[@stadt | @flughafenanrainer]
//AA[@abc and @def and ...] Alle AA-Elemente mit alle der gelisteten Attribute haben //gemeinde[@stadt and @flughafenanrainer]
//@* Alle Attribute an beliebiger Position //@*
//[@*] Alle Elemente mit irgendeinem Attribut. Das Ergebnis enthält keine Duplikate! //*[@*]
//[not(@*)] Alle Elemente die keinerlei Attribute haben. //*[not(@*)]
//[not(@xyz)] Alle Elemente die das genannte Attribut nicht haben. //gemeinden/gemeinde[not(@stadt)]
//[not(@xyz | @uvw|...)] Alle Elemente die keines der gelisteten Attribute haben. //gemeinden/gemeinde[not(@flughafenanrainer | @stadt)]
//[not(@xyz and @abc and ...)] Alle Elemente die nicht alle gelisteten Attribute haben. //gemeinden/gemeinde[not(@flughafenanrainer and @stadt)]
Wertvergleiche
//AA/*[@key < 5] Vergleiche können nur innerhalb von [ ] gemacht werden. Entsprechend ist das Ergebnis die Liste der Eltern-Knoten. Man kann aber darauf basierend wieder zu dem gesuchten Attribut gehen. //*[@flaeche<=5.2 and @flaeche>4]/@flaeche
Axen
//AA/../ Mit zwei Punkten hintereinander '..' steigt man im Pfad eine Ebene nach oben. Das Beispiel rechts findet zuerst alle Flüsse die durch die Gemeinde Glattfelden fliessen um anschliessend von deren Elternelementen aus die name-Attribute aller gemeinde-Elemente zu finden. Dadurch werden alle Gemeinden, die mit Glattfelden ein Gewässer teilen, gefunden. Achtung: Ein Resultat kann mehrfach auftreten! //fluss//gemeinde[@name='Glattfelden']/../gemeinde/@name
Genutzte Gewässer:
//fluss//gemeinde[@name='Glattfelden']/../../@name
Diverses
//comment()/.. Alle Knoten, die Kommentare enthalten //comment()/..
... | ... Kombinieren aller vier Typen
//*[@plz=8152] | //*[@plz=8152]/@plz | //comment() | //*[@plz=8427]/text()