Tim Tepaße: Frage zu xpath

Beitrag lesen

Hallo Thomas,

Ist es möglich mit xpath diesen Node über die Angabe eines Teils des Attributwertes zu finden?

Ja, mit der XPath-Funktion contains().

Also z.B. "Gib mir alle Elemente die im Attribut 'att' den Wert 'b' enthalten, quasi wie es bei CSS mit ~= möglich ist.

//*[contains(@att, "b")]

Erklärt:

//* selektiert alle Elementknoten.
//*[foo] selektiert alle Elementknoten bei denen die der Ausdruck „foo“ True zurückgibt. Nennt man auch Prädikat
contains(@att, "b") ist so eine Bedingung. Die Funktion liefert True zurück, wenn der String "b" im Wert des Attributes "att" enthalten ist, ansonsten false.

Dieser Ausdruck liefert ausgeführt gegenüber der Forumshauptdatei z.B. alle li-Elemente zurück, deren class-Attribut den String "visited" enthält ...

//li[contains(@att, "visited")]

... selektiert also alle gelesenen Threads. Praktisch, da so ein class-Attribut in HTML ja auch andere Klassen enthalten kann ("no-archive" und so), es in XPath 1.0 meines Wissens aber keine Möglichkeiten gibt, auf der Ebene der Klassen zu arbeiten.

Mit XPath 2.0 kann man da wohl mehr machen, vermute ich, da man dort auch mit XML Schema Datentypen operieren kann; ein token-basiertes Attribut hätte dann den Datentyp xsd:NMTOKENS. Allerdings kenne ich mich im Lande von XPath 2.0 und XQuery 1.0 so gut wie kaum aus und habe auch die Vermutung, das wäre komplizierter, als ein einfache Substring-Überprüfung wie oben. Aber vielleicht kann Thomas J.S. da mehr sagen. ;)

Tim