Die EXSLT-Stringerweiterungen nutzen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie haben guten Grund, die Erweiterungsfunktionen für die Stringverarbeitung einzusetzen, machen sich aber Sorgen wegen der Portabilität.

Lösung

Möglicherweise stellen Sie fest, dass Ihr XSLT-Prozessor bereits Stringfunktionen implementiert, die durch die EXSLT-Gemeinde definiert wurden. Zum Zeitpunkt der Veröffentlichung dieses Buchs handelte es sich um folgende Funktionen:

node-set str:tokenize(string input, string delimiters?)

Die Funktion str:tokenize teilt einen String auf und liefert eine Knotenmenge von Token-Elementen zurück, die jeweils ein Token aus dem String enthalten. Das erste Argument ist der String, der in Token aufgeteilt werden soll. Das zweite Argument ist ein String, der aus einer Anzahl von Zeichen besteht. Jedes Zeichen in diesem String wird als Trennzeichen verwendet. Der String, der durch das erste Argument angegeben wurde, wird bei jedem Vorkommen eines dieser Zeichen geteilt. Wenn das zweite Argument weggelassen wird, gilt als Vorgabe der String 	

  (d.h. Whitespace-Zeichen). Wenn das zweite Argument ein leerer String ist, dann liefert die Funktion eine Menge von Token-Elementen zurück, die jeweils ein einziges Zeichen enthalten.

node-set str:replace(string, object search, object replace)

Die Funktion str:replace ersetzt alle Vorkommen von Suchstrings innerhalb eines Strings durch Ersetzungsknoten, um eine Knotenmenge zu erzeugen.Das erste Argument gibt den String an, innerhalb dessen Strings ersetzt werden sollen. Das zweite Argument ist ein Objekt, das eine Suchstringliste festlegt. Wenn das zweite Argument eine Knotenmenge ist, dann zeigt die Suchstringliste das Ergebnis der Konvertierung jedes einzelnen Knotens in der Knotenmenge mit der Funktion string( ) in einen String, und zwar in der Dokumentenreihenfolge aufgelistet. Wenn das zweite Argument keine Knotenmenge ist, dann wird das zweite Argument mit der Funktion string( ) in einen String konvertiert, und die Suchstringliste besteht nur aus diesem String. Das dritte Argument ist ein Objekt, das eine Ersetzungsknotenliste festlegt. Wenn das dritte Argument eine Knotenmenge ist, dann besteht die Ersetzungsknotenliste aus den Knoten in der Knotenmenge in Dokumentenreihenfolge. Ist das dritte Argument keine Knotenmenge, dann besteht die Ersetzungsknotenliste aus einem einzigen Textknoten, dessen Stringwert identisch mit dem Ergebnis der Konvertierung des dritten Arguments in einen String mit Hilfe der Funktion string( ) ist.

string str:padding(number, string?)

Die Funktion str:padding erzeugt einen Füllstring bestimmter Länge.Das erste Argument gibt die Länge des zu erzeugenden Füllstrings an. Das zweite Argument gibt einen String an, der erforderlich ist, um die Füllung zu erzeugen. Dieser String wird so oft wiederholt, wie notwendig ist, um einen String der durch das erste Argument angegebenen Länge zu erzeugen. Falls der String mehr als ein Zeichen lang ist, muss er möglicherweise abgeschnitten werden, um die erforderliche Länge zu erreichen. Wurde kein zweites Argument angegeben, dann wird standardmäßig ein Leerzeichen (" ") verwendet. Ist das zweite Argument ein leerer String, dann liefert str:padding einen leeren String zurück.

string str:align(string, string, string?)

Die Funktion str:align richtet einen String innerhalb eines anderen Strings aus. Das erste Argument legt den Zielstring fest, der ausgerichtet werden soll. Das zweite Argument gibt den Füllstring an, innerhalb dessen ausgerichtet wird. Wenn der Zielstring kürzer ist als der Füllstring, dann wird ein Bereich von Zeichen im Füllstring durch diejenigen im Zielstring ersetzt. Welche Zeichen ersetzt werden, hängt vom Wert des dritten Arguments ab, das die Art der Ausrichtung bestimmt. Es kann left, right oder center lauten. Wurde kein drittes Argument angegeben oder hat es keinen dieser Werte, dann wird standardmäßig Linksausrichtung angenommen. Bei Linksausrichtung beginnt der Bereich der Zeichen, die durch den Zielstring ersetzt werden, mit dem ersten Zeichen im Füllstring. Bei Rechtsausrichtung endet der Bereich der Zeichen, die durch den Zielstring ersetzt werden, mit dem letzten Zeichen im Füllstring. Bei zentrierter Ausrichtung befindet sich der Bereich der Zeichen, die durch den Zielstring ersetzt werden sollen, derart in der Mitte des Füllstrings, dass die Anzahl der nicht ersetzten Zeichen entweder auf beiden Seiten des Bereichs gleich groß ist oder sich auf der linken Seite ein Zeichen weniger befindet als auf der rechten Seite. Wenn der Zielstring länger ist als der Füllstring, dann wird er so abgeschnitten, dass er die gleiche Länge hat wie der Füllstring. Anschließend wird er zurückgeliefert.

string str:encode-uri(string)

Die Funktion str:encode-uri liefert einen kodierten URI zurück. Die Methode str:encode-uri führt keine Kodierung der folgenden Zeichen durch: »:«, »/«, »;« und »?«. Ein URI-kodierter String konvertiert unsichere und reservierte Zeichen mit »%«, unmittelbar gefolgt von zwei hexadezimalen Ziffern (0–9, A-F), die den ISO-Latin-1-Code für dieses Zeichen angeben.

string str:decode-uri(string)

Die Funktion str:decode-uri dekodiert einen String, der URI-kodiert wurde. Eine Erklärung finden Sie unter str:encode-uri.

string str:concat(node-set)

Die Funktion str:concat nimmt eine Knotenmenge entgegen und liefert die Verkettung der Stringwerte der Knoten in dieser Menge zurück. Wenn die Knotenmenge leer ist, liefert sie einen leeren String.

node-set str:split(string, string?)

Die Funktion str:split teilt einen String auf und liefert eine Knotenmenge der Token-Elemente zurück, die jeweils ein Token aus dem String enthalten. Das erste Argument ist der aufzuteilende String. Das zweite ist ein Musterstring. Der String, der durch das erste Argument angegeben wurde, wird bei jedem Vorkommen dieses Musters aufgeteilt. Wenn das zweite Argument weggelassen wird, dann ist die Vorgabe der String   (d. h. ein Leerzeichen). Ist das zweite Argument ein leerer String, dann liefert die Funktion eine Menge aus Token-Elementen zurück, die jeweils ein einziges Zeichen enthalten.

 

Diskussion

Die Verwendung der EXSLT-Stringfunktionen garantiert keine Portabilität, da momentan keine XSLT-Implementierung sie alle unterstützt. Um genau zu sein, haben laut der EXSLT-Website manche Funktionen noch gar keine aktuelle Implementierung. Das EXSLT-Team gleicht dies aus, indem es nach Möglichkeit native XSLT-Implementierungen, JavaScript- und/oder MSXML-Implementierungen liefert.

Ein guter Grund für die Verwendung von EXSLT besteht darin, dass die Mitglieder des EXSLT-Teams in der XSLT-Gemeinschaft sehr aktiv sind und wahrscheinlich viele Implementierungen schließlich die meisten der Erweiterungen unterstützen werden. Es ist außerdem möglich, dass ein Teil ihrer Arbeit in künftige Versionen des Standard-XSLT einfließt.

Siehe auch

Im Buch XSLT 1.0 kurz & gut (O'Reilly) enthält die EXSLT-Referenz Anmerkungen, die viele XPath/XSLT-2.0-Funktionen vergleichen, die ähnliche oder gleiche Dinge erledigen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de