Mit der Ver­brei­tung von XML als Aus­zeich­nungs­spra­che für den platt­form­un­ab­hän­gi­gen Austausch von Daten stieg der Bedarf nach einem Standard, der es nicht auf XML ba­sie­ren­den An­wen­dun­gen er­mög­licht, komplexe Abfragen an XML-Dokumente zu stellen.

Hinweis

Die Ex­ten­si­ble Markup Language (kurz XML) ist eine Aus­zeich­nungs­spra­che, die der Dar­stel­lung hier­ar­chisch struk­tu­rier­ter Daten in Textform dient. XML ist für Mensch und Maschine glei­cher­ma­ßen gut lesbar und wird u. a. im World Wide Web zum Da­ten­aus­tausch zwischen zwei Com­pu­ter­sys­te­men verwendet.

Ent­spre­chen­de Standards für den pro­gramm­ge­steu­er­ten Zugriff auf XML-Dokumente wurden vom W3-Kon­sor­ti­um mit XQuery und XSLT ent­wi­ckelt. Diese halten Pro­gram­mier­schnitt­stel­len bereit, über die An­wen­dun­gen auf XML-Dokumente zugreifen, Inhalte abfragen oder XML-Dokumente trans­for­mie­ren können. Vor­aus­set­zung dafür ist ein Standard, der die Adres­sie­rung von Elementen in XML-Do­ku­men­ten er­mög­licht: die Pfad­be­schrei­bungs­spra­che XPath.

Wir führen Sie in das XPath-Da­ten­mo­dell (XDM) ein und stellen Ihnen die Syntax vor, die XPath-Aus­drü­cken zur Lo­ka­li­sie­rung von XML-Elementen zugrunde liegt.

KI-Assistent kostenlos – Ihr smarter All­tags­hel­fer
  • DSGVO-konform & sicher gehostet in Deutsch­land
  • Pro­duk­ti­vi­tät steigern – weniger Aufwand, mehr Output
  • Direkt im Browser starten – ohne In­stal­la­ti­on

Was ist XPath?

Bei der XML Path Language (XPath) handelt es sich um eine vom W3-Kon­sor­ti­um ent­wi­ckel­te Pfad­be­schrei­bungs­spra­che für XML-Dokumente. XPath stellt Anwendern eine nicht XML-basierte Syntax zur Verfügung, die es er­mög­licht, die Elemente eines XML-Dokuments gezielt zu adres­sie­ren.

In der Regel kommt XPath ein­ge­bet­tet in eine Wirts­spra­che (Host Language) zum Einsatz, die eine Ver­ar­bei­tung der adres­sier­ten XML-Elemente er­mög­licht. XQuery bei­spiels­wei­se dient der Abfrage von per XPath adres­sier­ten XML-Elementen. XSLT bedient sich der Ab­fra­ge­spra­che bei der Trans­for­ma­ti­on von XML-Do­ku­men­ten.

  • XPath: Na­vi­ga­ti­on in XML-Do­ku­men­ten
  • XQuery: Abfragen auf XML-Do­ku­men­ten
  • XSLT: Trans­for­ma­ti­on von XML-Do­ku­men­ten

Die aktuelle Version XPath 3.1 ist in der W3C-Re­com­men­da­ti­on vom 21. März 2017 spe­zi­fi­ziert.

Hinweis

Trotz Wei­ter­ent­wick­lung un­ter­stüt­zen zahl­rei­che XSLT-Pro­zes­so­ren, Web­brow­ser und An­wen­dun­gen nach wie vor lediglich den XPath-Standard 1.0 aus dem Jahr 1999.

Wie funk­tio­niert XPath?

XPath liegt ein Da­ten­mo­dell zugrunde, das XML-Dokumente als eine Sequenz von Elementen in­ter­pre­tiert, die in einer Baum­struk­tur an­ge­ord­net sind. Die Baum­struk­tur des XPath-Da­ten­mo­dells ist ver­gleich­bar mit der des Document Object Models (DOM), das als Schnitt­stel­le zwischen HTML und dy­na­mi­schem Ja­va­Script im Web­brow­ser fungiert.

Die Lo­ka­li­sie­rung von XML-Elementen erfolgt in Anlehnung an das Unix-Ver­zeich­nis­sys­tem in Form von Pfaden. Grund­be­stand­tei­le dieser Lo­ka­li­sie­rungs­pfa­de sind Knoten, Achsen, Kno­ten­tests und Prädikate.

Kno­ten­ty­pen

Die einzelnen Elemente einer XPath-Baum­struk­tur werden als Knoten be­zeich­net. Eine Ordnung der Knoten erfolgt sowohl durch die Do­ku­ment­rei­hen­fol­ge als auch durch Ver­schach­te­lung der XML-Elemente.

Das XPath-Da­ten­mo­dell un­ter­schei­det sieben Kno­ten­ty­pen mit un­ter­schied­li­chen Funk­tio­nen:

  • Ele­ment­kno­ten (element node)
  • Do­ku­ment­kno­ten (root node) (ab XPath 2.0, vorher Wur­zel­kno­ten)
  • At­tri­but­kno­ten (attribute node)
  • Text­kno­ten (text node)
  • Na­mens­raum­kno­ten (namespace node)
  • Ver­ar­bei­tungs­an­wei­sungs­kno­ten (pro­ces­sing in­s­truc­tion node)
  • Kom­men­tar­kno­ten (comment node)

Wir ver­an­schau­li­chen Ihnen die Kno­ten­ty­pen des XPath-Da­ten­mo­dells anhand eines Beispiels. Folgendes XML-Dokument dient dem Austausch von Daten im Rahmen einer Buch­be­stel­lung und be­inhal­tet alle sieben Kno­ten­ty­pen.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Order SYSTEM "order.dtd">
<?xml-stylesheet type="text/css" href="style.css"?>
<!--That is a comment!-->
<order date="2019-02-01">
    <address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/billing">
        <shipping:name>Ellen Adams</shipping:name>
        <shipping:street>123 Maple Street</shipping:street>
        <shipping:city>Mill Valley</shipping:city>
        <shipping:state>CA</shipping:state>
        <shipping:zip>10999</shipping:zip>
        <shipping:country>USA</shipping:country>
        <billing:name>Mary Adams</billing:name>
        <billing:street>8 Oak Avenue</billing:street>
        <billing:city>Old Town</billing:city>
        <billing:state>PA</billing:state>
        <billing:zip>95819</billing:zip>
        <billing:country>USA</billing:country>
    </address>
    <comment>Please use gift wrapping!</comment>
    <items>
        <book isbn="9781408845660">
            <title>Harry Potter and the Prisoner of Azkaban</title>
            <quantity>1</quantity>
            <priceus>22.94</priceus>
            <comment>Please confirm delivery date until Christmas.</comment>
        </book>
        <book isbn="9780544003415">
            <title>The Lord of the Rings</title>
            <quantity>1</quantity>
            <priceus>17.74</priceus>
        </book>
    </items>
</order>

Ele­ment­kno­ten (element node)

In der Baum­struk­tur des XPath-Da­ten­mo­dells ent­spricht jedes Element des XML-Dokuments einem Ele­ment­kno­ten. Aus­ge­nom­men davon sind die XML-De­kla­ra­ti­on und die Do­ku­ment­typ-De­fi­ni­ti­on am Anfang des Dokuments.

XML-De­kla­ra­ti­on:

<!--?xml version="1.0"? encoding="utf-8"?-->

Do­ku­ment­typ-De­fi­ni­ti­on (DTD):

<!DOCTYPE Order SYSTEM "order.dtd">

Ele­ment­kno­ten beginnen mit einem Start-Tag, enden mit einem End-Tag und sind in der Regel in­ein­an­der ver­schach­telt.

Der erste Ele­ment­kno­ten in der Do­ku­ment­rei­hen­fol­ge wird als Wur­zel­ele­ment be­zeich­net.

Das oben dar­ge­stell­te XML-Dokument bei­spiels­wei­se enthält als Wur­zel­ele­ment den Ele­ment­kno­ten order. Dieser fungiert als El­tern­ele­ment der un­ter­ge­ord­ne­ten Ele­ment­kno­ten address, comment und items, die wiederum weitere Ele­ment­kno­ten als Kind-Elemente be­inhal­ten.

Do­ku­ment­kno­ten (document node)

Als Do­ku­ment­kno­ten be­zeich­net man die Wurzel der Baum­struk­tur. Diese ist im XML-Dokument selbst weder visuell ma­ni­fes­tiert nicht textuell re­prä­sen­tiert. Es handelt sich um einen kon­zep­tio­nel­len Knoten, der alle anderen Elemente des Dokuments be­inhal­tet. Kind-Elemente des Do­ku­ment­kno­tens sind das Wur­zel­ele­ment sowie ggf. Ver­ar­bei­tungs­an­wei­sungs­kno­ten und Kom­men­tar­kno­ten.

At­tri­but­kno­ten (attribute node)

Die Attribute eines XML-Elements sind im XPath-Da­ten­mo­dell als At­tri­but­kno­ten re­prä­sen­tiert. Jeder At­tri­but­kno­ten besteht aus einem Be­zeich­ner und einem dem Attribut zu­ge­ord­ne­ten Wert.

Im Code­bei­spiel enthält der erste Ele­ment­kno­ten book den At­tri­but­kno­ten isbn mit dem Wert 9781408845660.

<book isbn="9781408845660"></book>

At­tri­but­kno­ten werden als dem Ele­ment­kno­ten zugehörig be­trach­tet, nicht jedoch als Kind-Elemente des Elements.

Text­kno­ten (text node)

Zei­chen­da­ten innerhalb des Start- und End-Tags eines Ele­ment­kno­tens werden als Text­kno­ten be­zeich­net.

Im Code­bei­spiel enthält der Ele­ment­kno­ten title den Text­kno­ten Harry Potter and the Prisoner of Azkaban.

Harry Potter and the Prisoner of Azkaban

Na­mens­raum­kno­ten

Bei wohl­ge­form­ten XML-Do­ku­men­ten sind alle ver­wen­de­ten Element- und At­tri­but­na­men einem Na­mens­raum zu­ge­ord­net. Die Zuordnung erfolgt in der Regel bereits durch die Do­ku­ment­typ-De­fi­ni­ti­on am Anfang des Dokuments.

Kommen in einem XML-Dokument Elemente oder Attribute un­ter­schied­li­cher Na­mens­räu­me zum Einsatz, wird der jeweilige Na­mens­raum mithilfe des Attributs xmlns oder dem xmlns-Präfix explizit im Start-Tag des be­tref­fen­den Elements definiert. Als Wert erwartet das Attribut xmlns einen Uniform Resource Iden­ti­fier (URI), der angibt, welchem Na­mens­raum das ent­spre­chen­de Element zu­zu­ord­nen ist. Die Zuordnung eines Na­mens­raums zu einem xmlns-Präfix steht dem Element sowie allen Kind-Elementen zur Verfügung. Jeder Na­mens­raum ent­spricht einem Na­mens­raum­kno­ten in der Bau­struk­tur.

Im Code­bei­spiel wurden für das XML-Element address zwei Na­mens­räu­me definiert: xmlns:shipping und xmlns:billing. Die Kind-Elemente des address-Elements tragen die jeweilige Zuordnung als Präfix.

<address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/ billing">
        <shipping:name>Ellen Adams</shipping:name>
        <shipping:street>123 Maple Street</shipping:street>
        <shipping:city>Mill Valley</shipping:city>
        <shipping:state>CA</shipping:state>
        <shipping:zip>10999</shipping:zip>
        <shipping:country>USA</shipping:country>
        <billing:name>Mary Adams</billing:name>
        <billing:street>8 Oak Avenue</billing:street>
        <billing:city>Old Town</billing:city>
        <billing:state>PA</billing:state>
        <billing:zip>95819</billing:zip>
        <billing:country>USA</billing:country>
    </address>

Das xmlns-Präfix er­mög­licht es, gleich­na­mi­ge Elemente aus un­ter­schied­li­chen Na­mens­räu­men eindeutig zu­zu­ord­nen. Das Element street mit dem Präfix shipping bei­spiels­wei­se enthält die Stra­ßen­an­ga­be der Lie­fer­adres­se, das Element street mit dem Präfix billing hingegen die Stra­ßen­an­ga­be der Rech­nungs­adres­se.

Ver­ar­bei­tungs­an­wei­sungs­kno­ten (pro­ces­sing in­s­truc­tion node)

Ver­ar­bei­tungs­an­wei­sun­gen in XML-Do­ku­men­ten stehen außerhalb des Do­ku­men­ten­baums und werden in der XPath-Ter­mi­no­lo­gie als Ver­ar­bei­tungs­an­wei­sungs­kno­ten be­zeich­net. Ein Ver­ar­bei­tungs­kno­ten beginnt mit <? und endet mit ?>.

Im oben dar­ge­stell­ten Code­bei­spiel finden Sie die folgende Ver­ar­bei­tungs­an­wei­sung:

<!--?xml-stylesheet type="text/css" href="style.css"?-->

Die XML-De­kla­ra­ti­on am Anfang der XML-Datei ist syn­tak­tisch wie eine Ver­ar­bei­tungs­an­wei­sung aufgebaut, gilt jedoch nicht als Ver­ar­bei­tungs­an­wei­sungs­kno­ten im Sinne des XPath-Da­ten­mo­dells.

Kom­men­tar­kno­ten (comment node)

Als Kommentar aus­ge­zeich­ne­te Inhalte eines XML-Dokuments werden von XPath als Kom­men­tar­kno­ten ver­ar­bei­tet. Der Knoten umfasst dabei lediglich den aus­ge­zeich­ne­ten Zei­chen­in­halt, nicht das Markup.

Im oben dar­ge­stell­ten Code­bei­spiel finden Sie folgenden Kom­men­tar­kno­ten:

That is a comment!

Lo­ka­li­sie­rungs­pfa­de

Die Adres­sie­rung von Knoten erfolgt mithilfe so­ge­nann­ter Lo­ka­li­sie­rungs­pfa­de. Bei einem Lo­ka­li­sie­rungs­pfad handelt es sich um einen XPath-Ausdruck, der verwendet wird, um durch die Baum­struk­tur zu na­vi­gie­ren und eine ge­wünsch­te Kno­ten­men­ge zu se­lek­tie­ren. Die Kno­ten­men­ge ist das Ergebnis eines XPath-Ausdrucks.

Lo­ka­li­sie­rungs­pfa­de werden von links nach rechts aus­ge­wer­tet. Man un­ter­schei­det zwischen absoluten und relativen Lo­ka­li­sie­rungs­pfa­den. Ein absoluter Lo­ka­li­sie­rungs­pfad beginnt am Do­ku­ment­kno­ten. In diesem Fall stellen Sie dem XPath-Ausdruck einen Schräg­strich (/) voran. Relative Lo­ka­li­sie­rungs­pfa­de beginnen bei einem be­lie­bi­gen Knoten innerhalb der Baum­struk­tur. Dieser Aus­gangs­punkt wird Kon­text­kno­ten genannt.

Ein Lo­ka­li­sie­rungs­pfad besteht aus einzelnen Lo­ka­li­sie­rungs­schrit­ten, die ähnlich wie bei der Adres­sie­rung von Dateien in Ver­zeich­nis­sys­te­men durch Schräg­stri­che (/) getrennt sind.

Jeder Lo­ka­li­sie­rungs­schritt eines Lo­ka­li­sie­rungs­pfads besteht aus bis zu drei Teilen: Achse, Kno­ten­test und eine beliebige Anzahl an Prä­di­ka­ten.

  • Achse: Mit der Wahl der Achse bestimmen Sie die Richtung der Na­vi­ga­ti­on in der Baum­struk­tur ausgehend vom Kontext- oder Do­ku­ment­kno­ten.
  • Kno­ten­test: Der Kno­ten­test ent­spricht einem Filter, mit dem Sie die auf der Achse liegenden Knoten auf die ge­wünsch­te Kno­ten­men­ge ein­gren­zen.
  • Prädikate: Prädikate er­mög­li­chen es Ihnen, die durch Achse und Kno­ten­test se­lek­tier­ten Knoten noch einmal zu filtern.

Die Lo­ka­li­sie­rungs­schrit­te eines XPath-Ausdrucks werden gemäß folgender Syntax notiert:

achse::knotentest[prädikat1][prädikat2]…
Notation Funktion
/ Fungiert als Pfad-Trenn­zei­chen zwischen zwei Lo­ka­li­sie­rungs­schrit­ten
:: Fungiert als Pfad-Trenn­zei­chen zwischen Achse und Kno­ten­test

Achsen

Die XPath-Syntax er­mög­licht eine Na­vi­ga­ti­on anhand folgender Achsen.

Achse Deutsche Be­zeich­nung Se­lek­tier­te Knoten
child Kind Alle direkt un­ter­ge­ord­ne­ten Kind-Knoten
parent El­tern­kno­ten Der direkt über­ge­ord­ne­te El­tern­kno­ten
de­s­cen­dant Nach­kom­men Alle un­ter­ge­ord­ne­te Knoten
ancestor* Vorfahr Alle über­ge­ord­ne­te Knoten
following Nach­fol­gen­de Knoten Alle in der Do­ku­ment­rei­hen­fol­ge nach­fol­gen­den Knoten mit Ausnahme der Nach­fah­ren
preceding* Vor­her­ge­hen­de Knoten Alle in der Do­ku­ment­rei­hen­fol­ge vor­an­ge­hen­den Knoten mit Ausnahme der Vorfahren
following-sibling Nach­fol­gen­de Ge­schwis­ter­kno­ten Alle nach­fol­gen­den Knoten im XML-Dokument, die vom selben El­tern­kno­ten abstammen
preceding-sibling* Vor­her­ge­hen­de Ge­schwis­ter­kno­ten Alle vor­an­ge­hen­den Knoten im XML-Dokument, die vom selben El­tern­kno­ten abstammen
attribute Attribut Alle At­tri­but­kno­ten eines Ele­ment­kno­tens
namespace Na­mens­raum Alle Na­mens­raum­kno­ten eines Ele­ment­kno­tens; ab Version 2.0 ist diese Achse nicht mehr in der Spe­zi­fi­ka­ti­on enthalten.
self Aktueller Knoten Der Kon­text­kno­ten selbst
de­s­cen­dant-or-self Nach­kom­men inklusive aktuellem Knoten Alle un­ter­ge­ord­ne­ten Knoten inklusive des Kon­text­kno­tens
ancestor-or-self* Vorfahren oder aktuelle Knoten Alle über­ge­ord­ne­ten Knoten inklusive des Kon­text­kno­tens
Hinweis

Bei den mit einem Sternchen (*) ge­kenn­zeich­ne­ten Achsen handelt es sich um rückwärts ge­rich­te­te An­wen­dun­gen, die gemäß XPath-Spe­zi­fi­ka­ti­on Version 1.0 ein op­tio­na­ler Be­stand­teil sind und von An­wen­dun­gen, die dem Standard ent­spre­chen, nicht zwangs­läu­fig un­ter­stützt werden müssen.

Folgende Grafik zeigt eine sche­ma­ti­sche Dar­stel­lung der wich­tigs­ten Achsen im XPath-Da­ten­mo­dell ausgehend vom Kon­text­kno­ten (rot):

Die Achse child:: bei­spiels­wei­se wählt alle Kind-Elemente des Kon­text­kno­tens D aus: Die Kno­ten­men­ge umfasst die Knoten E, H und I.

Kno­ten­test

Mit dem Kno­ten­test de­fi­nie­ren Sie einen Filter für die durch die Achse se­lek­tier­te Kno­ten­men­ge. Gemäß der XPath-Spe­zi­fi­ka­ti­on sind zwei Fil­ter­kri­te­ri­en möglich.

  • Name des Knotens: Geben Sie als Kno­ten­test einen Kno­ten­na­men an, um auf der aus­ge­wähl­ten Achse alle Knoten mit dem ent­spre­chen­den Namen aus­zu­wäh­len.
  • Knotentyp: Geben Sie als Kno­ten­test einen Knotentyp an, um auf der aus­ge­wähl­ten Achse alle Knoten mit dem ent­spre­chen­den Typ aus­zu­wäh­len.

Kno­ten­na­me als Fil­ter­kri­te­ri­um

Mit folgendem Lo­ka­li­sie­rungs­pfad bei­spiels­wei­se könnten Sie – bezogen auf das oben dar­ge­stell­te Code­bei­spiel – vom Do­ku­ment­kno­ten ausgehend alle Nach­kom­men mit dem Namen book auswählen.

/descendant::book

Möchten Sie hingegen für alle Ele­ment­kno­ten mit dem Namen book das Attribut isbn her­aus­fil­tern, benötigen Sie einen Lo­ka­li­sie­rungs­pfad mit zwei Lo­ka­li­sie­rungs­schrit­ten.

/descendant::book/attribute::isbn

Knotentyp als Fil­ter­kri­te­ri­um

Möchten Sie einen Knotentyp als Fil­ter­kri­te­ri­um für die Selektion der Kno­ten­men­ge de­fi­nie­ren, nutzen Sie als Kno­ten­test eine der folgenden Funk­tio­nen:

Funktion Se­lek­tier­te Knoten
node() Die Funktion node() wählt alle Knoten auf der aus­ge­wähl­ten Achse aus.
text() Die Funktion text() wählt alle Text­kno­ten auf der aus­ge­wähl­ten Achse aus.
comment() Die Funktion comment() wählt alle Kom­men­tar­kno­ten auf der aus­ge­wähl­ten Achse aus.
pro­ces­sing-in­s­truc­tion() Die Funktion pro­ces­sing-in­s­truc­tion() wählt alle Ver­ar­bei­tungs­an­wei­sungs­kno­ten auf der aus­ge­wähl­ten Achse aus.
Hinweis

Bereits XPath 1.0 definiert 25 Funk­tio­nen. Ab XPath 2.0 stehen 111 Funk­tio­nen für die Be­schrei­bung von Lo­ka­li­sie­rungs­pfa­den zur Verfügung. Eine Übersicht finden Sie in der W3C Re­com­men­da­ti­on XPath and XQuery Functions and Operators 3.1 von 21. März 2017.

Kno­ten­test mit Wildcard

Verwenden Sie anstelle des Kno­ten­tests den Platz­hal­ter * (Sternchen), werden auf der se­lek­tier­ten Achse alle Knoten aus­ge­wählt, die dem Haupt­kno­ten­typ der Achse ent­spre­chen. Dabei gilt: Enthält eine Achse Ele­ment­kno­ten, ist dieser Knotentyp der Haupt­kno­ten­typ der Achse. Dies trifft auf alle Achsen mit Ausnahme von attribute und namespace zu. Hier gelten At­tri­but­kno­ten bzw. Na­mens­raum­kno­ten als Haupt­kno­ten­typ.

Folgender Lo­ka­li­sie­rungs­pfad bei­spiels­wei­se gibt alle Attribute des aktuellen Kon­text­kno­tens aus:

attribute::*

Verkürzte Notation

Für häufig ver­wen­de­te Achsen und Lo­ka­li­sie­rungs­schrit­te wurden Ab­kür­zun­gen definiert, die statt der eng­li­schen Be­zeich­nun­gen im XPath-Ausdruck verwendet werden können.

Stan­dard­no­ta­ti­on Abkürzung Beispiel
child:: leer Bei child handelt es sich um die Stan­dardach­se. Die Ach­sen­be­zeich­nung kann bei Bedarf weg­ge­las­sen werden. Der Lo­ka­li­sie­rungs­pfad child::book/child::title ent­spricht somit der Kurzform book/title.
attribute:: @ Die Achse attribute inklusive Trenn­zei­chen lässt sich mit dem @-Zeichen abkürzen.Der Lo­ka­li­sie­rungs­pfad book/attribute::isbn wählt den At­tri­but­kno­ten isbn des Elements book aus und lautet in der ver­kürz­ten Notation book/@isbn.
/de­s­cen­dant-or-self::node()/ // Der Lo­ka­li­sie­rungs­schritt /de­s­cen­dant-or-self::node()/ wählt den Do­ku­ment­kno­ten und alle Nach­fah­ren aus und wird mit // abgekürzt. Statt /de­s­cen­dant-or-self::node()/child::item schreiben Sie verkürzt //item. Der Lo­ka­li­sie­rungs­pfad wählt alle item-Knoten im Dokument aus.
parent::node() .. Der Lo­ka­li­sie­rungs­schritt parent::node() wählt den El­tern­kno­ten des Kon­text­kno­tens aus und wird mit .. abgekürzt.
self::node() . Der Lo­ka­li­sie­rungs­schritt self::node() wählt den aktuellen Kon­text­kno­ten aus und wird mit . abgekürzt.

Prädikate

Mit Prä­di­ka­ten de­fi­nie­ren Sie weitere Fil­ter­kri­te­ri­en für die durch Achse und Kno­ten­test aus­ge­wähl­te Kno­ten­men­ge.

Prädikate bilden den op­tio­na­len dritten Teil eines Lo­ka­li­sie­rungs­schritts und werden in eckigen Klammern notiert. Die Fil­ter­kri­te­ri­en innerhalb der eckigen Klammern werden als Ausdrücke for­mu­liert, die u. a. Pfad­aus­drü­cke, Funk­tio­nen, Ope­ra­to­ren und Strings enthalten können.

Die XPath-Syntax un­ter­stützt all­ge­mei­ne Prädikate und nu­me­ri­sche Prädikate.

All­ge­mei­ne Prädikate

Ausdrücke in all­ge­mei­nen Prä­di­ka­ten filtern die durch die Achse und den Kno­ten­test aus­ge­wähl­te Kno­ten­men­ge, indem sie für jeden Knoten der Auswahl einen boole­schen Wert (true oder false) ausgeben. Alle Knoten mit dem Wert true sind Teil der Er­geb­nis­men­ge.

Die For­mu­lie­rung von Aus­drü­cken für all­ge­mei­ne Prädikate erfolgt anhand von Ope­ra­to­ren. Diese werden verwendet, um gezielt Knoten mit be­stimm­ten Inhalten oder Ei­gen­schaf­ten aus­zu­wäh­len – bei­spiels­wei­se alle Knoten, die eine be­stimm­ten Zei­chen­ket­te, einen At­tri­but­wert oder ein be­stimm­tes Kind-Element (mög­li­cher­wei­se an einer be­stimm­ten Position) be­inhal­ten.

Die folgenden Tabellen geben Ihnen einen Überblick über die zur Verfügung stehenden Ope­ra­to­ren. Man un­ter­schei­det arith­me­ti­sche Ope­ra­to­ren, logische Ope­ra­to­ren und Ver­gleichs­ope­ra­to­ren.

Arith­me­ti­sche Ope­ra­to­ren Funktion
+ Addition
- Sub­trak­ti­on
* Mul­ti­pli­ka­ti­on
div Fließ­kom­ma­tei­lung
mod Modulo
Ver­gleichs­ope­ra­to­ren Funktion
= Gleich
!= Ungleich
< Kleiner als; Mas­kie­rung innerhalb von XSLT er­for­der­lich (&lt;)
> Größer als; Mas­kie­rung innerhalb von XSLT zu empfehlen (&gt;)
<= Kleiner als oder gleich; Mas­kie­rung innerhalb von XSLT er­for­der­lich (&lt;)
>= Größer als oder gleich; Mas­kie­rung innerhalb von XSLT zu empfehlen (&gt;)
logische Ope­ra­to­ren Funktion
and Logische Und-Ver­knüp­fung
or Logische Oder-Ver­knüp­fung

Im folgenden Beispiel grenzt das Prädikat [title="Harry Potter and the Prisoner of Azkaban"] die Er­geb­nis­men­ge auf einen Ele­ment­kno­ten namens book ein, dessen Kind-Element title den String Harry Potter and the Prisoner of Azkaban enthält.

Hinweis

Das Beispiel ent­spricht der XPath-3-Syntax, die u. U. nicht von allen On­line­tools un­ter­stützt wird. Nach­voll­zie­hen lassen sich die hier vor­ge­stell­ten Abfragen bei­spiels­wei­se mit folgendem On­line­tes­ter: http://videlibri.sourcef­or­ge.net/cgi-bin/xidelcgi.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]

Wir haben nun den Ele­ment­kno­ten book aus­ge­wählt, der die Daten für das Harry-Potter-Buch be­inhal­tet.

<book isbn="9781408845660">
        <title>Harry Potter and the Prisoner of Azkaban</title>
        <quantity>1</quantity>
        <priceus>22.94</priceus>
        <comment>Please confirm delivery date until Christmas.</comment>
    </book>

Ein anderes Kind-Element dieses Ele­ment­kno­tens ist das Element comment. Möchten wir dessen Inhalt auswählen, muss der Lo­ka­li­sie­rungs­pfad lediglich um zwei Lo­ka­li­sie­rungs­schrit­te erweitert werden.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]/comment/text()

Wir na­vi­gie­ren mit dem Lo­ka­li­sie­rungs­schritt comment (Kurz­schreib­wei­se für child::comment) zum gleich­na­mi­gen Kind-Element des book-Element und wählen mit der Funktion text() dessen Text­kno­ten aus. Dieser ent­spricht folgendem String:

Please confirm delivery date until Christmas.

Wird in einem Prädikat lediglich ein Pfad­aus­druck verwendet, spricht man von einem Exis­tenz­test. Mit folgendem Lo­ka­li­sie­rungs­pfad bei­spiels­wei­se ließe sich testen, ob das oben auf­ge­führ­te XML-Dokument einen oder mehrere Knoten namens comment enthält.

Verkürzte Notation:

//book[comment]

Stan­dard­no­ta­ti­on:

/descendant-or-self::node()/child::book[child::comment]

Der Lo­ka­li­sie­rungs­pfad //book[comment] wählt alle Knoten mit dem Namen book aus, die ein Kind-Element mit dem Namen comment haben.

Nu­me­ri­sche Prädikate

Nu­me­ri­sche Prädikate er­mög­li­chen es Ihnen, Knoten anhand Ihrer Position zu adres­sie­ren. Folgender Lo­ka­li­sie­rungs­pfad bei­spiels­wei­se wählt den zweiten Knoten gemäß Do­ku­ment­rei­hen­fol­ge aus, dessen Name book ist:

//book[2]

Genau genommen handelt es sich bei dem Prädikat [2] um die Kurz­schreib­wei­se von [position()=2]. XPath se­lek­tiert somit zunächst alle Knoten mit dem Namen „book“ und filtert an­schlie­ßend den Knoten heraus, für den die Funktion position()=2 den boole­schen Wert true ergibt.

Hinweis

Anders als anderen Pro­gram­mier­spra­chen, beginnt Auf­zäh­lun­gen bei XPath mit 1.

Wei­ter­füh­ren­de In­for­ma­tio­nen zur XML Path Language

Einen Überblick über dem aktuellen Ent­wick­lungs­stand der XML Path Language sowie alle ver­öf­fent­lich­ten Standards und Entwürfe finden Sie auf der Website des W3C.

Kos­ten­lo­se In­for­ma­tio­nen und Tools zur Ver­wen­dung von XPath im Rahmen von Web­an­wen­dun­gen stehen Ihnen in den MDN-Web-Docs sowie im Microsoft Developer Network zur Verfügung.

Als deutsch­spra­chi­ge Quelle empfehlen wir zudem das Wiki des SELFHTML e. V..

Zum Hauptmenü