Die XML Path Language (XPath) ist eine vom W3-Konsortium entwickelte Abfragesprache, um Teile eines XML-Dokumentes zu adressieren und auszuwerten. XPath dient als Grundlage einer Reihe weiterer Standards wie XSLT, XPointer und XQuery. XPath ist derzeit in der Version 3.1 vom 21. März 2017 standardisiert.
In Webbrowsern, XSLT-Prozessoren und anderer Software wird oft nur die XPath-Version 1.0 aus dem Jahr 1999 unterstützt, vereinzelt auch die XPath-Version 2.0 von 2007.
Ein XPath-Ausdruck adressiert Teile eines XML-Dokuments, das dabei als Baum betrachtet wird, wobei einige Unterschiede zum „klassischen“ Baum der Graphentheorie zu beachten sind:
Ein XPath-Ausdruck setzt sich aus einem oder mehreren Lokalisierungsschritten (Location Steps) zusammen. Sie werden mit dem Zeichen / getrennt.
Ein Lokalisierungsschritt axis::node-test... besteht aus:
Beliebig viele XPath-Ausdrücke lassen sich mit dem Pipe-Zeichen | mengenmäßig vereinigen.
Es gibt stets verschiedene Möglichkeiten, eine gesuchte Knotenmenge in XPath auszudrücken.
XPath operiert auf der logischen Dokumentenstruktur. Das bedeutet beispielsweise, dass Entitäten bereits geparst wurden oder dass auch eventuelle Standard-Attribute und -Knoten, die ein Schema vorgibt, im Baum enthalten sind.
Durch Angabe von Achsen wird ausgehend vom aktuellen Kontextknoten in der Baumstruktur des XML-Dokuments navigiert.
Wird dabei vom Dokument-Knoten (der Wurzel des XML-Dokuments) ausgegangen, wird dem XPath-Ausdruck das Zeichen / vorangestellt.
Achse | adressierte Knoten | Abkürzung | Position im u. a. Baum (ausgehend von Element D) |
---|---|---|---|
der Dokument-Knoten | / (am Anfang eines XPaths) | Dokument-Knoten | |
child | alle direkt untergeordneten Kindknoten | (wird weggelassen) | E, G |
parent | der direkt übergeordnete Elternknoten | .. | B |
self | der Kontextknoten selbst (nützlich für zusätzliche Bedingungen) | . | D |
ancestor | alle übergeordneten Knoten | B, A | |
ancestor-or-self | alle übergeordneten Knoten inklusive des Kontextknotens | D, B, A | |
descendant | alle untergeordneten Knoten | .// | E, F, G |
alle Knoten des Dokuments außer dem Dokument-Knoten | // | A, B, C, D, E, F, G, H, I, J, K, L | |
descendant-or-self | alle untergeordneten Knoten inklusive des Kontextknotens | D, E, F, G | |
following | im XML-Dokument nachfolgend (ohne untergeordnete Knoten des selektierten Knotens) | H, I, J, K, L | |
following-sibling | wie following, aber zugleich vom selben parent stammend | H, I | |
preceding | im XML-Dokument vorangehend (ohne übergeordnete Knoten) | C | |
preceding-sibling | wie preceding, aber zugleich vom selben parent stammend | C | |
attribute | Attributknoten | @ | |
namespace | Namensraumknoten, die aus dem Attribut xmlns stammen |
Dieser Baum visualisiert beispielhaft die Struktur eines XML Dokuments
Dokument-Knoten | |||||||||||||||||||||||||||||||||
A | |||||||||||||||||||||||||||||||||
B | L | ||||||||||||||||||||||||||||||||
C | (D) | H | I | ||||||||||||||||||||||||||||||
E | G | J | K | ||||||||||||||||||||||||||||||
F | |||||||||||||||||||||||||||||||||
Die fünf Achsen self, ancestor, descendant, preceding und following bilden ausgehend von einem beliebigen Knoten den Dokumentbaum vollständig und überlappungsfrei ab.
Knotentests (geschrieben Achse::Knotentest) schränken die Elementauswahl einer Achse ein:
Durch Angabe von Prädikaten kann das Ergebnis weiter eingeschränkt werden. Prädikate werden in eckige Klammern eingeschlossen und können in beliebiger Zahl hintereinander geschrieben werden, wobei die Reihenfolge wesentlich ist. Prädikate können XPath-Ausdrücke enthalten, außerdem kann eine Vielzahl von Funktionen und Operatoren verwendet werden. Die sind zum Beispiel:
Beispiele:
(das gleiche leistet //Buch)
Gegeben sei folgendes XML-Dokument:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <dok> <!-- ein XML-Dokument --> <kap title="Nettes Kapitel"> <pa>Ein Absatz</pa> <pa>Noch ein Absatz</pa> <pa>Und noch ein Absatz</pa> <pa>Nett, oder?</pa> </kap> <kap title="Zweites Kapitel"> <pa>Ein Absatz</pa> <pa format="bold">Erste Zeile</pa> <pa format="bold">Zweite Zeile</pa> <pa format="italic">Dritte Zeile</pa> </kap> </dok>Beispiele für XPath-Ausdrücke:
Ausdruck | selektiert … |
---|---|
/dok | das erste Element dok |
/* | das äußerste Element unabhängig vom Namen (jedes wohlgeformte XML-Dokument hat genau ein äußerstes Element), hier dok |
//dok/kap | alle kap-Elemente innerhalb aller dok-Elemente |
//dok/kap | alle jeweils ersten kap-Elemente innerhalb aller dok-Elemente |
//pa | alle pa-Elemente auf allen Ebenen |
//kap/pa | alle Absätze der Kapitel mit Titel „Nettes Kapitel“. |
//kap/pa | Jeweils das zweite pa-Element in den beiden Kapiteln. |
//kap/pa | Zweite Zeile mit dem Format 'bold' im 2. Kapitel. |
child::* | alle Kindelemente des gegenwärtigen Knotens |
child::pa | alle pa-Kinder des gegenwärtigen Knotens |
child::text() | alle Textknoten des gegenwärtigen Knotens |
. | der gegenwärtige Knoten |
./* | alle Kindelemente des gegenwärtigen Knotens |
./pa | alle pa-Kinder des gegenwärtigen Knotens |
pa | alle pa-Kinder des gegenwärtigen Knotens |
attribute::* | alle Attribute des gegenwärtigen Knotens |
namespace::* | alle Namespaces des gegenwärtigen Knotens |
//kap/pa/text() | Textinhalt des zweiten pa-Elements im ersten kap-Element (also „Noch ein Absatz“) |
XPath-Visualisierer helfen, die mitunter komplizierten XPath-Abfragen auf konkrete XML-Dateien anzuwenden.
Empfehlungen |
ActivityPub | ARIA | Canonical XML | CDF | CSS | DOM | Geolocation API | HTML | HTML5 | InkML | ITS | JSON-LD | MathML | OWL | P3P | PLS | PNG | RDF | RDF-Schema | RIF | SCXML | SISR | SKOS | SMIL | SOAP | SRGS | SSML | SVG | SPARQL | Timed Text | Turtle | VoiceXML | WSDL | XForms | XHTML | XHTML+RDFa | XInclude | XLink | XML | XML Base | XML-Encryption | XML Events | XML Information Set | XML Namespace | XML Schema | XML Signature | XPath | XPointer | XProc | XQuery | XSL | XSL-FO | XSLT (Elemente) |
|
Arbeitsentwürfe und Kandidaten |
CCXML | CURIE | SMIL Timesheets | sXBL | WICD | XFrames | XBL | XHTML+MathML+SVG | XMLHttpRequest | |
Anmerkungen |
XAdES | XFDL | XHTML+SMIL | XUP | |
Richtlinien |
Web Content Accessibility Guidelines | Multimodal Interaction Activity | Markup Validation Service | |
Initiativen |