Privacy Policy Cookie Policy Terms and Conditions XPath - Wikipedia

XPath

aus Wikipedia, der freien Enzyklopädie

Die XML Path Language (XPath) ist eine vom W3C-Konsortium entwickelte Anfragesprache, um Teile eines XML-Dokumentes zu adressieren. XPath dient als Grundlage einer Reihe weiterer Standards wie XSLT, XPointer und XQuery. Die aktuelle Version ist XPath 1.0, während der Nachfolger XPath 2.0 noch nicht als Empfehlung standardisiert ist.

Als Weiterentwicklungen betrachten lassen sich auch XPointer, das weitergehende Adressierungsmöglichkeiten bietet, und XLink, das die Einbindung von Verweisen in XML-Dokumente standardisiert, sowie XQuery.

Inhaltsverzeichnis

[Bearbeiten] Prinzipien von XPath 1.0

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:

  • Knoten (nodes) des Baumes sind XML-Elemente, -Attribute, -Kommentare, -Namensräume und -Verarbeitungsanweisungen.
  • Nur XML-Elemente gelten als child im Sinne einer XPath-Achse. Alle anderen Knoten stehen auf der gleichen Hierarchie-Stufe des Baumes wie der Knoten, der sie enthält.
  • Die Achsen preceding, following, preceding-sibling und following-sibling orientieren sich nicht allein an der Baumstruktur, sondern auch an der Reihenfolge der Deklaration der Elemente im XML-Dokument (Linked-Tree).


Ein XPath-Ausdruck setzt sich zusammen aus:

  • einem oder mehreren Lokalisierungsschritten (Location Steps). Sie werden mit dem Zeichen   /   getrennt.

Ein Location-Step besteht aus:

  • Achse (axis) und
  • Knotentest (node-test),
  • optional gefolgt von einem oder mehreren Prädikaten (predicates).


Beliebig viele XPath-Ausdrücke lassen sich mit dem 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 zum Beispiel, dass man Entities schon geparsed vorfindet oder dass auch eventuelle Standard-Attribute und -Knoten, die durch ein Schema vorgegeben werden, schon im Baum enthalten sind.

[Bearbeiten] Achsen

Durch Angabe von Achsen wird ausgehend vom aktuellen Kontextknoten in der Baumstruktur des XML-Dokuments navigiert.

Wird dabei von der Wurzel des XML-Dokuments ausgegangen, wird dem XPath-Ausdruck das Zeichen / vorangestellt.

Achse adressierte Knoten Abkürzung
child direkt untergeordnete Knoten weglassen oder *
parent der direkt übergeordnete Elternknoten ..
self der Kontextknoten selbst (nützlich für zusätzliche Bedingungen) .
ancestor übergeordnete Knoten
ancestor-or-self übergeordnete Knoten inklusive des Kontextknotens
descendant untergeordnete Knoten
descendant-or-self untergeordnete Knoten inklusive des Kontextknotens //
following unabhängig von der Hierarchie der Knoten, nachfolgend im XML-Dokument
following-sibling wie following, und vom gleichen parent stammend
preceding gleiche Ebene der Baumstruktur, vorhergehend im XML-Dokument
preceding-sibling wie preceding, und vom gleichen parent stammend
attribute Attributknoten @
namespace Namensraumknoten die aus dem Attribut xmlns stammen

Die fünf Achsen self, ancestor, descendant, preceding und following bilden von einem beliebigen Knoten den gesamten Dokumentbaum ab.

[Bearbeiten] Knotentests

Knotentests (geschrieben Achse::Knotentest) schränken die Elementauswahl einer Achse ein:

  • Angabe eines Elementnamens wählt alle entsprechenden Elemente.
    Beispiel: /descendant-or-self::Foo wählt alle Elemente im Dokument, die den Namen "Foo" haben.
  • Mit dem Zeichen * wählt man beliebige Elemente.
    Beispiel: /descendant-or-self::Foo/child::* wählt alle Elemente im Dokument, die Kinder von Elementen mit dem Namen "Foo" sind.
  • Mit text(), comment() und processing-instruction() lassen sich Knoten bestimmten Typs wählen.
    Zu beachten ist, dass Attribute und Namensräume nicht in Knotentests, sondern als eigene Achse gewählt werden.

[Bearbeiten] Prädikate

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 verwendet werden. Die sind zum Beispiel:

  • Relationszeichen: = != and or < > <= >=
  • Zeichenkettenfunktionen:
    • normalize-space() - Entfernen von Leerzeichen am Anfang und Ende des Strings
    • substring() - Einen Teilstring selektieren
    • string-length() - Länge des Strings
  • Numerische Funktionen: + - * div mod
  • Knotenmengen-Funktionen:
    • count() - Anzahl der Knoten in einer Knotenmenge
    • id() - Selektiert Elemente über die DTD-ID
    • name() - Name des Knotens

Beispiel: //child::Buch[count(./Seite)<=100][count(./Seite)>=10] liefert alle Knoten vom Typ "Buch", die mindestens 10 aber höchstens 100 Kindelemente vom Typ "Seite" haben. (das gleiche leistet //Buch[count(Seite)<=100 and count(Seite)>=10])

[Bearbeiten] Beispiel

Gegeben sei folgendes XML-Dokument:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<dok>
    <!-- ein XML-Dokument -->
    <kap title="Nettes Dokument">
        <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>
    </kap>
</dok>

Beispiele für XPath-Ausdrücke:

  • /dok selektiert das Wurzel-Element dok
  • /* selektiert das Wurzel-Element unabhängig vom Namen (jedes wohlgeformte XML-Dokument hat genau ein Wurzel-Element)
  • /dok/kap selektiert alle kap-Elemente innerhalb eines dok Elements
  • /dok/kap[1] selektiert das erste kap-Elemente innerhalb eines dok Elements
  • //pa selektiert alle pa-Elemente auf allen Ebenen (Vorsicht: langsam)
  • //kap[@title="Nettes Dokument"]/pa selektiert alle Absätze des Kapitels "Nettes Dokument".

XPath-Visualisierer helfen, die mitunter komplizierten XPath-Abfragen auf konkrete XML-Dateien anzuwenden.

[Bearbeiten] Siehe auch

[Bearbeiten] Weblinks

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -