English | Français | >> Deutsch << | Magyar | 中文 | Polski ZVON > Tutorials > XSLT Tutorial
>> Inhalt << | Element-Index

Einführung

Seite 1 Mit XSL kann jeder Quelltext nach belieben ver?ndert werden. Beispiel und Beispiel erzeugen verschiedene Ausgaben, ausgehend von ein und dem selben Quelldokument.
Seite 2 Jedes XSL-Template muss mit einem xsl:stylesheet element beginnen. Das Attribute version='1.0' referenziert die Version der XSL(T) Spezifikation. Dieses Beispiel zeigt das einfachste aller m?glichen Vorlagen. Wenn es keinen Inhalt enth?lt, wird die Standardverarbeitung benutzt.
Seite 3 Ein XSL(T)-Prozessor durchl?uft eine XML-Datei und versucht übereinstimmungs-Regeln zu finden. Wenn welche gefunden wurden, werden die Anweisungen innerhalb der übereinstimmungs-Regeln geprüft.
Seite 4 Die Inhalte der Ausgangs-Elemente kann in zwei verschiedenen Arten wieder gewonnen werden. Beispiel benutzt das "xsl:value-of"-Konstrukt. In diesem Fall wird der Inhalt der Elemente ohne weitere Verarbeitung benutzt. Die Anweisung "xsl:apply-templates" in Beispiel ist anders. Der Parser verarbeitet weiterhin alle selektierten Elemente, für die eine Vorlage definiert wurde.

Vorlagen

Seite 5 Ein XSL(T)-Prozessor durchl?uft eine XML-Datei und versucht übereinstimmungs-Regeln zu finden. Wenn welche gefunden wurden, werden die Anweisungen innerhalb der übereinstimmungs-Regeln geprüft.
Seite 6 Es ist m?glich Teile eines XML-Dokument durch eine Pfadangabe zu adressieren. Die hierfür ben?tigte Syntax wird in der XPath-Spezifikation erl?utert. Die einfachen Anwendungsf?lle sehen wie normale Pfadangaben aus. ( Beispiel )
Seite 7 Die Verarbeitung beginnt immer mit der Suche nach match="/" . Hiermit wird der Wurzelknoten gezogen (Das einzig Element was direkt unterhalb der Wurzl liegt ist das Document-Element, in unserem Fall die "Quelle"). Viele Stylesheets verwenden das Element nicht direkt. Wenn es nicht explizit angegeben ist, wird es indirekt verwendet (es beinhaltet als einzige Anweisung). Diese Anweisung bedeutet: verarbeite alle Kind-Elemente, einschlie?lich der Text-Knoten. Vergleichen Sie Beispiel und Beispiel . Wenn eine Vorlage für den Knoten besteht, wird die Standardverarbeitung ausgelassen. ( Beispiel ).Wenn Sie Nachfahren des Knoten einbinden wollen, müssen sie hierfür die entsprechenden Vorlagen anfordern ( Beispiel ).
Seite 8 Eine Vorlage kann mehrere Ergbnisse, anhand einer Liste von Pfaden, produzieren. Die verschiedenen Pfade werden mit "|" getrennt ( Beispiel ). Der Platzhalte "*" finde alle M?glichkeiten. Vergleiche Beispiel mit Beispiel .
Seite 9 "//" wird h?ufig in Pfadangaben verwendet. Wenn es am Anfang eines Pfades steht ist folgendes gemeint: Selektiere alle Knoten im Dokument des spezifierten Typs. ( Beispiel ). Taucht "//" in der Mitte einer Pfadangabe auf, so bedeutet es: selektiere alle Knoten innerhalb des durch // markierten Knoten welche den ersten Teil des Pfades enthalten ( Beispiel ).
Seite 10 Mit dem modes-Attribut kann ein Element mehrmals bearbeitet werden, und dabei bei jeder Verarbeitung ein anderes Ergebniss liefern. In Beispiel ist eines der modes nicht vorhanden.
Seite 11 Nicht selten liefern mehrer Vorlagen die selben Elemente in einer XML-Quelle. Es muss also eine Entscheidungsm?glichkeit geschaffen werden, welche Vorlage in welcher Reihenfolge benutzt werden soll. Das Priority-Attribut spezifiert die Reihenfolge der Bearbeitung. Wenn das Attribut nicht gesetzt ist, wird die Reihenfolge anhand verschiedener Regeln berechnet. Beispiel und Beispiel unterscheiden Sich durch die Reihenfolge der Vorlagen. Beispiel zeigt die Standard-Reihenfolge, da kein Priority-Attribut gesetzt wurde. Die Vorlage CCC hat eine geringere Priorir?r als CCC/CCC. Vergleichen Sie Beispiel und Beispiel . Die Vorlage CCC hat eine geringere Priorir?t als CCC/CCC oder AAA/CCC/CCC, aber die beiden letzten haben die gleiche Priorit?t. In einem solchen Fall kann der XSLT-Prozessor eine Fehlermeldung erzeugen; Wenn keine Fehlermeldung erzeugt wird, muss anhand der übriggebliebenen Auswahl-Vorlagen festgestellt werden, welches als letztes im Stylesheet vorkommt. In Beispiel hat ein "*" weniger Priorit?t als CCC. Der Bereich bei ausgerechneten Priorit?ten liegt zwischen -0.5 to 0.5. Die W3C-XSLT Spezifikation gibt hier weitere Details.

Attribute

Seite 12 Attribute k?nnen in ?hnlicher Weise wie Elemente behandelt werden. Beachten Sie das "@" vor dem Attribut-Namen.
Seite 13 Attribute k?nnen in der selben Art und Weise behandelt werden, wie Elemente.
Seite 14 Es k?nnen Element in Abh?ngigkeit der Anwesenheit oder Abwesenheit eines bestimmten Attributes selektiert werden. Beispiel schlie?t bestimmte Element ein aber Beispiel schlie?t bestimmte Elemente aus. Immer in Abh?ngigkeit, ob das angegebene Attribute vorhanden ist, oder nicht.

Achsen

Seite 15 Die Achsen, wie sie in XPath spefiziert werden, spielen in XSLT eine gro?e Rolle. Unter XSLT reference gibt es weitere Informationen. Vergleichen Sie: child axis [=Kinder] ( Beispiel ), descendant axis [=Nachfahren] ( Beispiel ), parent axis [=Eltern] ( Beispiel ), ancestor axis [=Vorfahren] ( Beispiel ), following-sibling axis [=Nachfolge-Geschwister] ( Beispiel ), preceding-sibling axis [=Vorg?nger-Geschwister] ( Beispiel ), following axis [=Nachfolger] ( Beispiel ), preceding axis [=Vorg?nger] ( Beispiel ), attribute axis [=Attribute] ( Beispiel ), namespace axis [=Namensr?ume] ( Beispiel ), self axis [=Aktuelles Element] ( Beispiel ), descendant-or-self axis [=Nachfahre oder aktuelles Element] ( Beispiel ), ancestor-or-self axis [=Vorfahren oder aktuelles Element] ( Beispiel ).
Seite 16 In diesem Beispiel werden alle XPath-Achsen verwendet.
Seite 17 Die Kind-Aches muss nicht angegeben werden, weil Sie die Default-Achse ist. Die Attribut-Achse kann mit @ abgekürzt werden. // ist die Abkürzung für Nachfahre oder Selbst. Der Punkt . ist eine Abkürzung für Selbst und zwei Punkte .. ist die Abkürzung für das Eltern-Element.

Wiederholung und Sortierung

Seite 18 Die xsl:for-each Anweisung verweist auf ein Template, welches für jeden Knoten angewandt wird, welches über das Select-Attribute referenziert wurde.
Seite 19 Knoten, die mit xsl:for-each ( Beispiel und Beispiel )oder xsl:apply-templates ( Beispiel ) selektiert werden, k?nnen sortiert werden. Wenn eine Sortierreihenfolge berücksichtigt werden soll, ist das Order Attribute notwendig. Beispiel sortiert in ausfteigender und Beispiel sortiert in absteigender Reihenfolge.
Seite 20 Beispiel sortiert nach Zeichenketten- und Beispiel nach numerischen-Regeln. Der Unterschied ist mitunter gravierend. 2 kommt im Alphabet nach der 1, also wird 2 nach 10 sortiert, wenn der Text-Mode (=Zeichenkettenregeln) verwendet wird.
Seite 21 Beispiel sortiert die Gro?buchstaben und Beispiel sortiert die Kleinbuchstaben nach vorne.

Anlegen von Elementen und Attributen

Seite 22 xsl:element generiert Element in der Reihenfolge der Verarbeitung. Beispiel benutzt diese Eigenschaft, w?hrend Beispiel erzeugt den selben Effekt, auf eine etwas kompliziertere Art und Weise. Beispiel Beispiel
Seite 23 xsl:attribute erzeugt Attribut-Elemente in der Reihenfolge der Verarbeitung. Es erzeugt Attribute in den Elementen, in denen sie definiert sind.
Seite 24 Die Konstruktionen "copy" und "copy-of" dienen dazu Knoten zu kopieren. "copy" kopiert dabei nur das Element, ohne Kinder und ohne Attribute, w?hrend "copy-of" alles kopiert.
Seite 25 Das "xsl:copy" Element kann ein "use-attribute-sets"-Attribut besitzen. Auf diese Weise k?nnen bestimmte Attribute für die Kopie spezifiziert werden. Beispiel arbeitet nicht wie erwartet (Die Zuordnung innerhalb eines "use-attributes-sets" zu einer benamten Funktion), da Ausdrücke in Attributen, die auf ein benamtes XSLT-Objekt zeigen nicht evaluiert werden.

Bedingte Anweisungen

Seite 26 xsl:if erm?glicht konditionale Verarbeitung. Beispiel zeigt einen typischen Fall für xsl:for-each, n?mlich Text zwischen zwei beliebigen Eintr?gen hinzufügen. Nicht selten soll aber nach dem letzten Element kein Text mehr eingefügt werden. Hier kommt das xsl-if Konstrukt zum tragen. ( Beispiel )
Seite 27 Das xsl:choose Element wird benutzt um zwischen verschiedenen M?glichkeiten auszuw?hlen.
Seite 28 Hier wird gezeigt, wie man einen Text findet, der mit einer Zahl beginnt.

Zahlen generieren und formatieren

Seite 29 Beispiel zeigt das Standard-Verhalten des xsl:number Elementes. Die Nummerierung einzelner Kapitel-Elemente h?ngt von der Position der Kapitel-Elemente ab. Jede Ebene von Kapiteln wird unabh?ngig voneinander gez?hlt. Das Beispiel Beispiel erm?glicht eine etwas natürlichere Nummerierung.
Seite 30 xsl: number fügt formatierte Zahlen in die Ausgabe ein. über das Format-Attribut wird die Formatierung definiert. Das Attribut beginnt mit einer Format-Beschreibung gefolgt von entsprechenden Trennzeichen. Untersuchen sie die einzelnen Vorlagen um die unterschiedliche Schreibweise zu vergleichen.
Seite 31 Beispiel und Beispiel sind Beispiele wie Zahlen über mehrere Ebenen hinweg formatiert werden k?nnen.

Variabeln

Seite 32 Beispiel und Beispiel zeigen verschiedene Wege xsl:variable zu setzen, Beispiel und Beispiel zeigt xsl:param benutzt wird.
Seite 33 Eine Vorlage kann verschieden Variablen mit dem selben Namen enthalten. Beispiel zeigt ein Weg, wie der Wert einer globalen Variablen ermittelt werden, die den selben Namen besitzt, wie eine lokale Variable. Das Beispiel zeigt einen inkorrekten Ansatz. Der Wert der lokalen Variablen ist an das xsl:when Element gebunden. Der Rest des Templates sieht in diesem Fall nur die globale Variable.
Seite 34 Parameter für ein Template k?nnen mit dem xsl:with-param-Element übergeben werden. Wenn das Template ein xsl:param-Element mit dem selben Namen wie das Namen-Attribut des xsl:with-param, wird dieser Wert verwendet. Beispiel zeigt ein typisches Beispiel. Soll eine Variable übergeben werden, so ist diese mit dem xsl:param-Element zu definieren. Das Beispiel Beispiel zeigt einen falschen Ansatz.
Seite 35 Eine Variable kann einen Teil des Ergebniss-Baum enthalten. Die Operationen welche für einen Teilbaum erlaubt sind eine Teilmenge derer, die für den gesamten Knoten gilt. Ein Operation auf einen Teilbaum ist nur dann zul?ssig, wenn die Operation auf eine Zeichenkette angewendet werden k?nnte. Unter Umst?nden muss die Zeichenkette zuerst in eine Zahl oder einen Boolschen-Wert konvertiert werden. Zum Beispiel ist es nicht m?glich die XPATH-Kürzel /, // oder []-Opertoren auf einen Ergebniss-Baum anzuwenden. Wenn aber eine erlaubte Operation auf ein Ergebniss-Baum angwendet wird, wird es genauso ausgeführt wie in der vergleichbaren Knoten-Auswahl. Vergleichen Sie Beispiel mit Beispiel .
Seite 36 Es gibt einen erheblichen Unterschied in der Definition der Variablen-Werte.

Numerische Berechnungen

Seite 37 Die number() Funktion transformiert ihr Argument in eine Number. Beispiel zeigt eine String-Umwandlung, Beispiel konvertiert die Booleschen Werte True bzw. False.
Seite 38 Addition, Subtraktion und Multiplikation verwenden die bekannte Syntax ( Beispiel ). Division ist etwas ungew?hnlich. Der Slash / wird bereits in Paterns verwendendet. Stattdessen wird das Schlüsselwort div verwendet ( Beispiel ).Der Operator mod liefert den Rest nach einer Teiler-Division. ( Beispiel )
Seite 39 Die Funktion sum() summiert alle Zahlen innerhalb der selektierten Knoten. Beispiel summiert alle Zahlen, Beispiel summiert nur die ungeraden Zahlen..
Seite 40 Die Funktionen ceiling(), flor() und round() transformieren Flie?komma-Zahl und Ganzwert-Zahlen (Integer), jeweils auf unterschiedliche Art und Weise.
Seite 41 Die Funktion string() transformiert sein Argument in eine Zeichenkette. Diese Funktion wird in der Regel nicht direkt in einer Vorlage verwendet, weil sie eh in den meisten F?llen automatisch aufgerufen wird.. Beispiel zeigt eine Konvertierung von Zahlen in eine Zeichenkette. Zu beachten ist hier das Ergebniss des Teilens durch Null.
Seite 42 Hier wird getestet, ob der Wert eine Zahl ist.

Boolsche Funktionen

Seite 43 In Beispiel sind Zeichenketten Argumentte der boolean() Funktion. Eine zeichenkette ist wahr, wenn seine L?nge nicht null ist. In Beispiel wurde der Text in Zahlen umgewandelt und dann an die boolean() Funktion weiter gegeben. Beispiel vergleicht "0" als eine Zeichenkette und als Zahl. Beispiel benutzt eine Knotensamlung als Argument für eine boolean() Funktion.
Seite 44 Die not() Funktion liefert true zurück, wenn das Argument falsch ist und liefert false wenn das Argeument richtig ist.
Seite 45 Die Funktionen true() und false() sind recht hilfeich, wenn bestimmte Bedinungen w?hrend der Programmierung getestet werden müssen.
Seite 46 die lang() Funktion liefert true oder false abh?ngig davon zurück, ob der Kontext-Knoten wie er mit xml:lang spezifiziert wurde in der selben Sprache oder einer Sub-Sprache, wie sie im Argument definiert wurde vorliegt. Die Sprache des Kontext-Knoten wird furch den Wert des xml:lang Attributes festgelegt. Wenn das Atttribut nicht vorliegt dann liefert die Funktion lang() false zurück. Wenn ein Attribut vorliegt, liefert die Funktion true zurück, wenn das übergebene Argument mit der Attributwert übereinstimmt. Gro?- / Kleinschreibung wird hierbei ignoriert.

Funktionen für die Zeichenkettenverarbeitung

Seite 47 Die Funktion string() transformiert sein Argument in eine Zeichenkette. Diese Funktion wird in der Regel nicht direkt in einer Vorlage verwendet, weil sie eh in den meisten F?llen automatisch aufgerufen wird.. Beispiel zeigt eine Konvertierung von Zahlen in eine Zeichenkette. Zu beachten ist hier das Ergebniss des Teilens durch Null.
Seite 48 Die concat() Funktion zieht alle Argumente zu einem String zusammen.
Seite 49 Die starts-with() Funktion liefert true wenn das erste Zeichenketten-Argument mit dem zweiten Argument beginnt, andernfalls liefert sie false. Die contains() Funktion liefert true wenn im ersten Argument das zweite vorkommt, ansonsten liefert sie false.
Seite 50 Die Funktionen substring-before() und substring-after() ben?tigen jeweils zwei Argumente. Das erste Argument ist die zu durchsuchende Zeichenkette. Das zweite ist ein Stopp-Wort. Die Funktion substring-before() liefert alles aus Argument eins zurück, was vor dem Stopp-Wort liegt, w?hrend substring-after() alles liefert, was hinter in dem Stopp-Wort liegt. Die Funktion substring() ben?tigt insgesamt drei Argumente. Argument eins: Die zu durchsuchende Zeichenkette. Argument zwei: Ab welcher Position der Teil-Zeichenkette beginnt. Argument drei gibt an, wieviele Zeichen entnommen werden sollen. Wird das dritte Argument nicht definiert, erstreckt sich der Teilstring bis zum Ende des in Argument eins übergebenenen Zeichenkette. Gez?hlt wird ab 1. ( Beispiel ). Beispiel zeigt eine Situation in der einige Argumente au?erhalb des Bereiches liegen oder keine Integrale sind. Die zurückgelieferte zeichenkette beinhaltet nur die Zeichen deren Position gr??er oder gleich dem zweiten Argument sind -- und w?re ein drittes Argument spezifiert, nur die Zeichen, deren Position kleiner der Summe der Argumente zwei und drei w?ren.
Seite 51 Die string-length Funktion liefert die Anzahl der Zeichen innerhalb einer Zeichenkette zurück. Die normalize-space() Funktion liefert eine Zeichenkette zurück, bei der führenden und folgenden Leerzeichen entfernt werden, und mehrfach-Vorkommnisse eines Leerzeichen durch genau ein Leerzeichen ersetzt werden.
Seite 52 Die translate() Funktion ersetzt in der in Argument eins übergebene Zeichenkette das Zeichen aus Argument zwei mit dem zeichen aus Argument drei. Wenn ein Zeichen mehrfach im zweiten Argument vorkommt, dann beschreibt das erste Vorkomniss das Ersetzungs-Zeichen. Wenn das dritte Argument l?nger als das zweite Argument ist, werden die überh?ngenden Argumente ignoriert.

Funktionen für Knotenverarbeitung

Seite 53 Die Funktion position() gibt eine Zahl zurück, die in etwa die Kontext-Position wieder spiegelt. Die last() Funktion gibt die Anzahl der Elemente wieder, die durch die den Auswahl-Kontext ermittelt wurden. Beispiel zeigt die Verwendung der beiden Funktionen in verschiedenen Zusammenh?ngen. Beispiel vergleicht sortierte und unsortierte xsl:for-each Elemente.
Seite 54 The count() Funktion gibt die Anzahl der Knoten wieder, die über "Node-Set"-Argument eingegrenzt wurden.
Seite 55 Die id()-Funktion selektiert Elemente bei ihrer eindeutigen ID. Beispiel zeigt einfache Anwendungsbeispiele. Untersuchen Sie Beispiel genau. Der Inhalt des title-Elements wird nicht in eckigen Klammern dargestellt "[]" da in der DTD seine Attribute als CDATA, und nicht als ID definiert wurden. Mehrere ID's in einem bereitgestellt werden. ( Beispiel ).
Seite 56
Seite 57 Die Funktionen name(), local-name() und namespace-uri() werden benutzt um Informationen über Element- und Attributnamen sowie über Namespaces zu ermitteln.

Ausgabe

Seite 58 Mit dem xsl:output Element besteht die M?glichkeit zu spezifizieren, wie der Ergbnissbaum ausgegeben wird. Eine XSLT-Engine sollte sich bei der Ausgabe an das halten, was im xsl:output spezifiziert; auch wenn es keine Verpflichtung dafür gibt. Das xsl:output Element ist nur als Top-Level-Element erlaubt. Beispiel gibt das Ergbniss als HTML und Beispiel als XML. Interessant ist hier, wie die Leeren Tags unterschiedlich behandelt werden.
Seite 59 Da es kein dezidiertes xml:output Element gibt, ist Standard-Ausgabe-Methode XML. ( Beispiel ), aber wenn das Document-Element der Ausgabe den Wert HTML besitzt (unabh?ngig von (Gro?- und Kleinschreibung), dann wird HTML benutzt ( Beispiel ).
Seite 60 Wird die HTML-Ausgabemethode gew?hlt, sollte kein schliessendes Tag für ein leeres Element erzeugt werden. Weiterhine sollten Sonderzeichen in Script- und Style-Elemente nicht umgewandelt werden. Schauen Sie sich die Quellen des untersten, mittleren Fenster an. Vergleichen Sie Beispiel und schlagen Sie in der XSLT-Spezifikation für weitere Details nach.
Seite 61 Das encoding-Atttribut left die gewünschte Codierung der Ausgabe fest. Bei der HTML-Ausgabe sollte ein META-Tag als erstes Tag innerhalb des HEAD-Elementes die Codierung festlegen Beispiel codiert die Ausgabe in UTF-8, Beispiel in UTF-16, und Beispiel in Cp1250. Beispiel Schauen Sie sich im mittleren, unteren Fenster ihres Browser die Quelle einmal genau an. Die XML-Quelle besitzt spezielle Zeichen, welche nicht im angegebenen Zeichensatz enthalten sind, und somit mit Sonderzeichen ersetzt werden, welche im Zeichensatz definiert sind.
Seite 62 Die Text output Methode gibt der Ergebniss-Baum aus, in dem die Zeichenketten-Werte jedes einzelnen Knoten in der Reiheinfolge des Dokumentes ohne weitere Zeichenersetzung verwendet werden. Im Quelltext l?sst sich die Ausgabe genau betrachten.

Kopieren

Seite 63 Die Konstruktionen "copy" und "copy-of" dienen dazu Knoten zu kopieren. "copy" kopiert dabei nur das Element, ohne Kinder und ohne Attribute, w?hrend "copy-of" alles kopiert.
Seite 64 Das "xsl:copy" Element kann ein "use-attribute-sets"-Attribut besitzen. Auf diese Weise k?nnen bestimmte Attribute für die Kopie spezifiziert werden. Beispiel arbeitet nicht wie erwartet (Die Zuordnung innerhalb eines "use-attributes-sets" zu einer benamten Funktion), da Ausdrücke in Attributen, die auf ein benamtes XSLT-Objekt zeigen nicht evaluiert werden.

Weitere Funktionen

Seite 65 Die current()-Funktion liefert eine Knoten-Sammlung zurück, die nur den aktuellen Knoten als Mitglied besitzt. Für den am meisten au?en liegenden Ausdruck (der Ausdruck der nicht innerhalb eines anderen Ausdrucks liegt), ist der aktuelle Konten auch immer der Kontextknoten. Wie auch immer, innerhalb eckiger Klammern ist aktuelle Knoten in aller Regel ein anderer als der Knotextknoten.
Seite 66 Die Funktion generate-id() erzeugt eine ID welche konform zur XML-Spezifikation ist. Beispiel benutzt diese Funktion um allen Elementen des XML-Quelldokumentes eine ID zuzuweisen.

Stylesheets kombinieren

Seite 67 Stylesheet-Vorlagen k?nnen ineinander entweder importiert (xsl:import) oder inkludiert (xsl:include) werden. Importieren und inkludieren ist beinahe das selbe. Beim importieren jedoch, bekomen die Regeln und Definitionen des importierten Stylesheet eine h?hrere Priorit?t als die des Templates in dem importiert wird. Beispiel und Beispiel sind in das übriggebliebene Stylesheet importiert oder inkludiert worden.
Seite 68 Beispiel importiert Beispiel , und Beispiel importiert Beispiel .
Seite 69 Weitere Beispiele zum Thema "xsl:include" und "xsl:import".
Seite 70 Mit dem xsl:apply-imports Element k?nnen Informationen über das zu importierende Template hinsichtlich des Verhalten, welches angepasst werden soll, abgerufen werden. Beispiel importiert Beispiel und überschreibt seine Vorlage. Beispiel importiert Beispiel und ?ndert seine Vorlage. xsl-apply-imports funktioniert nur mit Vorlagen die mittels xsl:import eingelesen wurden. Es funktioniert nicht, falls xsl:include zum Einsatz kam. ( Beispiel ).
Seite 71 Importierte Reihenfolgen werden vorrangig zu den über die Priority-Attribute definierten Reihenfolge behandelt. Schauehn Sie Beispiel an.