[/]schritt(/schritt)*
Die Verarbeitungsweise ist ähnlich wie bei Pfaden im Dateisystem:
achse::typ([prädikat])*
achse gibt dabei das Verhältnis der gewünschten Knoten zum Kontextknoten an. Mögliche Werte sind:
child |
Alle direkten Nachkommen des Knotens, aber keine Attribute. |
descendant |
Alle Nachkommen des Knotens, aber keine Attribute. |
descendant-or-self |
Alle Nachkommen des Knotens, inklusive er selbst, aber keine Attribute. |
attribute |
Alle Attribute (außer Namespaces), die direkte Nachkommen des Knotens sind. |
namespace |
Alle Namespace-Attribute, die direkte Nachkommen des Knotens sind. |
parent |
Den Vater des aktuellen Knotens. |
ancestor |
Alle Väter des Knotens. |
ancestor-or-self |
Alle Vorfahren des Knotens, inklusive er selbst. |
following-sibling |
Den folgenden Bruder. |
preceding-sibling |
Den vorhergehenden Bruder. |
following |
Alle folgenden Knoten, die keine Nachkommen des Knotens sind. |
preceding |
Alle vorhergehenden Knoten, die keine Nachkommen des Knotens sind. |
self |
Der aktuelle Knoten. |
Für jeden der durch achse ausgewählten Knoten wird geprüft, ob er vom angegebenen typ ist. Mögliche Werte sind:
* |
Alle Knoten vom typ der Achse. Der Achsentyp ist immer Element außer bei attribute und namespace. |
namespace:* |
Alle Knoten im Namespace namespace |
namespace:typ |
Alle Knoten mit Namen namespace:typ |
| typ | Alle Knoten mit Namen typ und NULL-Namespace |
text() |
Alle Textknoten |
comment() |
Alle Kommentarknoten |
processing-instruction() |
Alle Processing-Instruction-Knoten |
processing-instruction(name) |
Alle Processing-Instruction-Knoten mit Expanded-Name name |
node() |
Alle Knoten |
Für alle Knoten, die jetzt noch ausgewählt sind, werden (falls vorhanden) die prädikate ausgewertet.
Die Prädikate sind XPath-Ausdrücke, deren genauer Aufbau unten erläutert wird.
Ein Knoten bleibt ausgewählt, wenn keine Prädikate angegeben sind oder für jedes Prädikat gilt:
Jeder der so ausgewählten Knoten dient als Ausgangsknoten für den folgenden Schritt im Location Path.
Für häufig gebrauchte Schritte sind Abkürzungen definiert:
child:: |
child:: kann weggelassen werden, text() bedeutet dasselbe wie child::text() |
|
attribute:: |
@ |
attribute:: kann durch @ abgekürzt werden; @href bedeutet dasselbe wie attribute::href |
self::node() |
. |
Den aktuellen Knoten kann man mit . bezeichnen. |
parent::node() |
.. |
Den übergeordneten Knoten kann man mit .. referenzieren |
/descendant-or-self::node()/ |
// |
Einen Knoten sowie alle seine Nachkommen wählt man mit einem einfachen // aus. |
text()
child::text()/html
/child::html//table
/descendant-or-self::node()/child::table../table/@width
/parent::node()/child::table/attribute::widthfollowing-sibling::*/tr/td
following-sibling::*/child::tr/child::td
| node-set | Eine (ggf. auch leere) Menge von Knoten |
| boolean | Ein boolescher Wert (TRUE oder FALSE) |
| number | Eine Fließkommazahl |
| string | Ein string |
In Ausdrücken dürfen folgende Elemente verwendet werden:
| Element | Beispiel | Typ |
|---|---|---|
| Klammerung | ( ... ) | |
| Strings | "text" 'text' | string |
| Zahlen | 1 1.2 .1 | number |
| Arithmetik | + - * div mod
| number |
| Logik | <= < >= > = != and or |
boolean |
| Location-Paths | /schritt1/schritt2 | node-set |
| Vereiningungsmenge | location-path | location-path |
node-set |
| Variablen | $Variablenname |
(Typ der Variablen) |
| Funktionsaufrufe | funktion() | (Typ der Funktion) |
| Typ | Aufruf | Beschreibung |
|---|---|---|
| node-set-Funktionen | ||
| number | last() | Gibt die Nummer des letzten Knotens (= Anzahl der Knoten) im Kontext zurück |
| number | position() | Gibt die Nummer des aktuellen Knotens im Kontext zurück |
| number | count(node-set) | Gibt die Anzahl der Knoten im Argument zurück |
| node-set | id(object) | Gibt das Element mit der Unique-ID object zurück |
| string | local-name(node-set?) | Liefert den lokalen Namen eines Knotens |
| string | namespace-uri(node-set?) | Liefert den namespace-URI eines Knotens |
| string | name() | Gibt den kompletten Namen eines Knotens zurück |
| string-Funktionen | ||
| string | string(object?) | Wandelt das Argument in einen string |
| string | concat(string, string, string*) | Gibt die Aneinanderreihung der Argumente zurück |
| boolean | starts-with(string, string) | Gibt TRUE zurück, wenn der erste string mit dem zweiten beginnt |
| boolean | contains(string, string) | Gibt TRUE zurück, wenn der zweite string im ersten enthalten ist |
| string | substring-before(string, string) | Gibt den string zurück, der vor dem ersten Auftreten des zweiten im ersten string liegt. |
| string | substring-after(string, string) | Gibt den string zurück, der hinter dem ersten Auftreten des zweiten im ersten string liegt. |
| string | substring(string, number, number?) | Gibt den string mit länge der zweiten Zahl zurück, der an der durch die erste nummer angegebenen position beginnt. |
| number | string-length(string?) | Gibt die Länge des strings zurück. |
| string | normalize-space(string?) | Entfernt Whitespaces am Anfang un Ende, sowie aufeinanderfolgende Whitespaces. |
| string | translate(string, string, string) | Ersetzt alle Vorkommen des zweiten strings im ersten durch den dritten |
| boolean-Funktionen | ||
| boolean | boolean(object) | Wandelt das Argument in ein boolean |
| boolean | not(boolean) | Führt eine not-Operation auf dem Argument aus |
| boolean | true() | Ergibt TRUE |
| boolean | false() | Ergibt FALSE |
| boolean | lang(string) | Gibt TRUE zurück, wenn die Sprache des Kontextknotens die durch string angegebene ist |
| number-Funktionen | ||
| number | number(object) | Wandelt das Argument in eine Zahl |
| number | sum(node-set) | Summiert alle in Zahlen konvertierten Knoten |
| number | floor(number) | Gibt die ganze Zahl zurück, die größer oder gleich dem Argument ist |
| number | ceiling(number) | Gibt die ganze Zahl zurück, die kleiner oder gleich dem Argument ist |
| number | round(number) | Rundet das Argument kaufmännisch |
/html/body/table[2]
/child::html/child::body/child::html[2]//table[@width = "50%"]
/descendant-or-self::table[attribute::width = "50%"]//td[position() != last()]//ex:head//*[local-name() = 'head' and namespace-uri() = 'http://www.example.org']