Filtern von Knotensets durch Prädikate

Xpath-Ausdrücke dienen der selektion von Knoten innhalb von XML-Bäumen. Damit ein XPath-Ausdruck auch auf komplexere Problemstellungen herangezogen werden kann, bedarf es einer Möglichkeit die Ergebnisse der bisherigen Ausdrücke nochmals zu filtern um so genauere Zielmengen an Knoten zu definieren. Für diesen Einsatz können XPath- Ausdrück sogenannte Prädikate enthalten. Prädikate sind Ausdrücke die einen booleschen Wert (wahr oder falsch) zurückliefern und so für jeden selektierten Knoten einen nochmaligen Filter definieren. Trifft für einen Knoten aus einem Knotenset der Ausdruck eines Prädikats zu (ist die Bedingung also wahr), so bleibt dieser Knoten im Ergebniskontenset. Ist dagehen der Wahrheitswert für einen Knoten falsch, so wird dieser aus dem Knotenset herausgefiltert. Ausgangssituation ist also immer eine Knotenmenge, die dann noch verfeinert (eingeschränkt) wird.

Filtern von Knotensets 1

Der Ausdruck //adresse selektiert alle Elementknoten "adresse" des Dokumentes. In einem zweiten Schritt, nämlich durch die Anwendung eines Prädikates auf die selektierte Knotenmenge, wird diese nun reduziert. Nur diejenigen Elemente, welche die Bedingung erfüllen, dass das Kindelement "ort" den Wert "Stuttgart" hat, verbleiben in der Knotenmenge, alle anderen werden ausgefiltert.

DerAusdruck in einem Prädikat kann neben einem Stringvergleich auch noch andere Wertevergleiche ausdrücken. Beispiele dafür sind:

Reiner Stringvergleich adresse[name="Willy Winzig"]
Numerischer Vergleich (größer) Album[@bewertung > 3]
Numerischer Vergleich (kleiner gleich) //Lied[@jahr <= 1990]
Kombination aus "gößer" und "ungleich" Album[@bewertung < 2]/Lied[@jahr != 2000]

Neben einem Wertevergleich kann ein Kontenset auch auf Koexistenz anderer Elemente hin überprüft werden

/adressenliste[adresse] Prüfung auf Existenz einen Kindelementes "adresse"
/adressenliste/adresse[@kat] Prüfung auf Existenz eines Attributes "kat" innhalb von "adresse"

Achtung: Ein Prädikat prüft nur auf wahr oder falsch. Implizite Konvertierung zu boolean.

<< zurück vor >>