XSLT, XSL-FO, SAX und DOM Flashcards
Was ist XSLT?
XSLT (XSL Transformations) ist eine XML-Sprache zur Transformation von XML-Dokumenten in andere (XML-)Dokumente. Sie gehört neben XPath (XML Path Language) und XSL-FO (XSL Formatting Objects) zur Sprachfamilie XSL (Extensible Stylesheet Language).
Wie wird eine XSLT Transofmation durchgeführt?
Zur Durchführung eines Transformationsprozesses ist ein XSLT-Prozessor notwendig. Dieser liest ein XML-Dokument und ein XSLT-Stylesheet ein, führt die Anweisungen des XSLT-Stylesheets aus und erzeugt ein oder auch mehrere Ergebnisdokumente.
XSLT-Prozessoren sind sowohl als Open-Source als auch kommerziell erhältlich. Auch in modernen Webbrowsern sind XSLTProzessoren integriert.
Wie kann eine XSLT-Transformation in einer Webumgebung durchgeführt werden?
Die XSLT-Transformation in einer Webanwendung kann entweder auf der Serverseite oder auf der Clientseite geschehen.
Wie funktioniert die Serverseitige XSLT-Transformation?
Bei der serverseitigen Transformation wird die Transformation auf dem Webserver ausgeführt und eine fertige HTML-Seite an den Browser gesendet. Alle serverseitigen Techniken, wie z. B. Microsoft .NET, J2EE, oder Open-Source-Techniken, wie PHP, enthalten mittlerweile XSLT-Prozessoren.
Wie funktioniert die clientseitige XSLT-Transformation?
Bei der clientseitigen Transformation wird die XSLT-Transformation auf dem Client, also vom Browser des Clientrechners durchgeführt. Die meisten modernen Browser haben dazu XSLT-Prozessoren integriert.
Im XML-Quelldokument muss eine Referenz auf das XSLT-Stylesheet eingefügt werden. Dazu dient folgende Verarbeitungsanweisung (processing instruction):<?xml-stylesheet type="text/xsl" href="XSLT_Stylesheet.xsl"?>
Wo liegen die Nachteile einer clientseitigen XSLT-Transformation? (3)
- Selbst neuere Browser unterstützen nicht den vollen XSLTSprachumfang.
- Die zu übertragende Datenmenge ist größer als bei einer serverseitigen Transformation, da auf jeden Fall zwei Dateien, das XML-Dokument und das XSLT-Stylesheet, dem Client übermittelt werden müssen.
- Der Verweis auf das XSLT-Stylesheet ist fest in der XML-Datei kodiert. Soll das XML-Dokument mit einem anderen XSLTStylesheet transformiert werden, muss die XML-Datei editiert werden.
Wie ist ein XSLT-Stylesheed aufgebaut?
XSLT ist eine deklarative Sprache. Ein XSLT-Stylesheet beschreibt, wie ein Quellbaum in einen Ergebnisbaum transformiert wird. Das folgende Codesegment zeigt das Grundgerüst eines XSLTStylesheets:
~~~
<?xml version=”1.0” encoding=”UTF-8”?>
<xsl:stylesheet>
<-- Top-Level-Elemente -->
<-- z. B. xsl:template -->
</xsl:stylesheet>
~~~
Ein XSLT-Stylesheet ist ein XML-Dokument und beginnt daher mit der XML-Deklaration. Das Wurzelelement eines XSLT-Stylesheets ist <xsl:stylesheet>
. Alternativ kann auch <xsl:transform>
angegeben werden, was jedoch nicht üblich ist.
Welche Namensräume müssen in Zusammenhang mit XSLT verwendet werden?
Alle XSLT-Elemente und -Attribute müssen dem Namensraum Namensraum http://w3.org/1999/XSL/Transform
angehören, damit der XSLTProzessor sie als solche erkennt. Es ist üblich, das Kürzel xsl
als Namensraum-Präfix zu notieren. Weitere Namensraumangaben sind z. B. notwendig, wenn die Elemente des Ergebnisdokumentes einem speziellen Namensraum angehören sollen. Soll beispielsweise ein XSL-FO-Dokument erzeugen werden, muss die Namensraumdeklaration xmlns:fo="http://www.w3.org/1999/XSL/Format
” hinzufügen werden.
Was sind Top-Level-Elemente in XSLT? Fünf Beispiele
Die XSLT-Elemente, die direkte Kindelemente von <xsl:stylesheet>
sein dürfen, heißen Top-Level-Elemente.
Es sind 19 Top-Level-Elemente definiert. Die Elemente dürfen im XSLT-Stylesheet in beliebiger Reihenfolge auftreten.
* <xsl:attribute-set>
: Definition einer Attributmenge, die Elementen hinzugefügt werden kann.
* <xsl:character-map>
: Deklaration benannter Character-Mappings.
* <xsl:function>
: Deklaration einer Funktion (»Stylesheet-Funktion«).
* <xsl:import>
: Importiert ein anderes Stylesheet.
* <xsl:include>
: Inkludiert ein anderes Stylesheet.
Wie wird ein XSLT-Transformations-Prozess ausgeführt?
- Der XML-Parser liest das XML-Dokument und das XSLT-Stylesheet und interpretiert beide als Baum.
- Der XSLT-Prozessor liest nun die beiden Bäume und wandelt den Baum des XML-Dokumentes (Quellbaum, source tree) auf der Grundlage der Regeln im XSLT-Stylesheet in einen neuen Baum (Ergebnisbaum, result tree) um.
- Der Ergebnisbaum wird in eine serielle Form gebracht: das neue XML-Dokument.
Was sind XSLT Template-Regeln?
Für die Baumtransformation wird kein prozeduraler Algorithmus formuliert, stattdessen werden Regeln angegeben, wie der Quellbaum in den Ergebnisbaum umgewandelt wird. Die Regeln zur Transformation, sogenannte Template-Regeln, oft auch kurz nur Templates genannt, werden durch <xsl:template>
-Elemente beschrieben. Jede Template-Regel »matched« eine Sequenz von Elementen oder Attributen im Quellbaum. Dazu wird im match-Attribut ein Muster in Form eines XPath-Ausdrucks angegeben, der die Quellknoten identifiziert, auf welche die Regel angewandt werden kann.
Was ist der Template Rump in XSLT?
Im Rumpf einer Template-Regel werden Ausgaben erzeugt und Templatedie weitere Abarbeitung des Baumes gesteuert.
Rumpf Ausgaben können erzeugt werden durch einfachen Text, dem Notieren von Elementen der Zielsprache oder von Textknoten bzw. Attributwerten des Quelldokuments.
Die notierten Elemente der Zielsprache werden mit ihren Attributen unverändert in das Ergebnisdokument übernommen und daher auch literale Ergebniselemente (literal result elements) (vom lateinischen litera = Buchstabe) genannt.
Wie können in XSLT Textknoten bzw. Attributwerte des Quelldokuments ausgegeben werden?
Zur Ausgabe von Textknoten bzw. Attributwerten des Quelldokuments kann die Anweisung <xsl:value-of select="XPath-Ausdruck"/>
verwendet werden. Der durch den XPath-Ausdruck adressierte Wert wird als String in das Ausgabedokument eingefügt.
Wie wird in XSLT der Dokumentbaum abgearbeitet?
Die Anweisung <xsl:apply-templates/>
steuert die weitere Abarbeitung des Baumes. Wird sie in dieser Form – als leeres Element und ohne Attribute – notiert, bedeutet dies, dass die Kindknoten des aktuellen Knotens ausgewählt werden. Für jeden Kindknoten wird nun nach einer Template-Regel gesucht, die auf diesen Knoten passt, und diese Regel wird angewendet.
Wie kann eine einfache Transformation mit XSLT durchgeführt werden?
Eine einfache Transformation kann wie folgt durchgeführt werden: Ausgehend vom Dokumentknoten bewegt man sich mit <xsl:apply-templates/>
, d. h. der Aufforderung an den XSLT-Prozessor nach Template-Regeln für alle Kindelemente des Kontextknotens zu suchen und diese anzuwenden, bis zur untersten Ebene der Elementknoten.
Für diese Elemente wird nun jeweils eine Template-Regel notiert mit der Anweisung <xsl:value-of select="."/>
, gib den Inhalt des aktuellen Elementes aus. Dem Element <xsl:apply-templates>
kann das Attributselect="XPath-Ausdruck"
hinzugefügt werden. In diesem Fall werden
Template-Regeln nur für die durch den XPath-Ausdruck adressierten Knoten gesucht.
Wofür wird die Anweisung <xsl:apply-templates/>
verwendet, was bewirkt das Attribut select
?
Die Anweisung <xsl:apply-templates/>
weist den Prozessor an, für alle Kindknoten nach passenden Template-Regeln zu suchen und diese anzuwenden. Es werden daher alle Kindknoten in der Reihenfolge, in der sie im Dokument vorkommen, betrachtet. Dem Element <xsl:apply-templates/>
kann das Attribut select
hinzugefügt werden.
Attributwert von select ist ein XPath-Ausdruck:<xsl:apply-templates select="XPath-Ausdruck"/>
Durch dieses select
-Attribut wird bei der Baumabarbeitung die durch den XPath-Ausdruck adressierte Sequenz von Knoten ausgewählt und für diese Knoten wird nach Template-Regeln gesucht.
Was ist das Default-Verhalten von Template Regeln?
Für jeden Knotentyp existiert eine eingebaute Template-Regel. Sie wird angewandt, wenn im Stylesheet für einen Knoten keine passende Regel definiert wurde. Mixed Content lässt sich unter Ausnutzung der eingebauten Template-Regeln einfach verarbeiten. Bei Konflikten – zwei Template-Regeln passen zu einem Element – gibt es klare Regeln zur Konfliktlösung.
Was bewirken die default Template-Regeln?
Die eingebaute Regel für Elementknoten und den Dokumentknoten sorgt dafür, dass die Verarbeitung mit den Kindknoten fortgesetzt wird.
Die eingebaute Regel für Text- und Attributknoten sorgt dafür, dass der Wert dieser Knoten dem Ausgabedokument hinzugefügt wird. Diese Regel wird aber nur dann ausgeführt, wenn die Knoten ausgewählt wurden.
Die eingebaute Regel für Kommentare und Verarbeitungsanweisungen
ist leer, d. h. trifft der Prozessor auf einen dieser Knotentypen,
tut er gar nichts.
Wie können unerwünschte Ausgaben durch default Template Regeln vermieden werden? (2 Möglichkeiten)
Um unerwünschte Ausgaben zu vermeiden, können für Elemente leere Template-Regeln geschrieben werden, um die default Regeln zu überschreiben und die Unerwünschten Elemente so keine Ausgabe erzeugen.
Alternativ dazu gibt es auch die Möglichkeit, die Baumabarbeitung »besser« zu steuern. Im konkreten Falle bedeutet dies, dem Element <xsl:apply-templates>
das Attribut select
hinzuzufügen. Als Attributwert von select
wird ein XPath-Ausdruck angeben, wodurch bei der Baumabarbeitung lediglich die durch den XPath-Ausdruck angegebene Teilsequenz von Knoten ausgewählt und nur für diese Knoten nach Template-Regeln gesucht wird. Die Anweisung <xsl:apply-templates>
hat dann also folgende Form:<xsl:apply-templates select="XPath-Ausdruck"/>
Wie können durch Template-Regeln konflikte entstehen und wie können sie aufgelöst werden? (4 Regeln)
Bei der Baumabarbeitung sucht der Prozessor nach einer Regel, die auf den aktuellen Kontextknoten passt. Hierbei kann es passieren, dass die Anwendung mehrerer Template-Regeln möglich wäre. Da jedoch immer nur eine Regel auf einen Knoten angewendet werden darf, muss es klare Regeln geben, wie solche
Konflikte aufgelöst werden. Es gelten:
* Eine Regel für spezifischere Information hat Vorrang vor einer Regel für eine allgemeinere Information.
* Suchmuster mit Wildcards wie »*
« oder »@*
« sind allgemeiner als Suchmuster ohne Wildcards. Daher haben die eingebauten Template-Regeln immer eine niedrigere Priorität als explizit formulierte Regeln.
* Falls durch die vorangegangenen Regeln keine eindeutige Auswahl möglich ist, wird die zuletzt im Stylesheet notierte Regel gewählt.
* Die Priorität kann auch über das Attribut priority festgelegt werden. Eine höhere Zahl liefert eine höhere Priorität.
Wie kann ein eigenes Default-Verhalten für Template-Regelen definiert werden?
Das in einem Anwendungsfall gewünschte Verhalten wird durch das Top-Level-Element <xsl:mode>
festgelegt. Es verfügt über die Attribute on-nomatch
und warning-on-no-match
zur Festlegung des Verhaltens bei fehlenden Regeln und die Attribute on-multiple-match
und warning-on-multiple-match
zur Festlegung des Verhaltens bei mehreren passenden Template-Regeln.
Was bewirkt das Attribut on-no-match
, welche 6 Werte kann es annehmen?
Mit dem Attribut on-no-match wird das Verhalten bei fehlenden Template-Regeln festgelegt. Es kann folgende Werte annehmen:
* deep-copy
* shallow-copy
* deep-skip
* shallow-skip
* text-only-copy
* fail
Was bewirkt der Attribut-Wert deep-copy
bei on-no-match
?
Ist der Attributwert gleich deep-copy
, wird ein Element mit fehlender Template-Regel zusammen mit dem Teilbaum seiner Nachfolger-Elemente unverändert in die Ausgabe übernommen. Es wird nicht versucht, Template-Regeln für Elemente des Teilbaums zu finden.
Was bewirkt der Attribut-Wert shallow-copy
bei on-no-match
?
Ist der Attributwert gleich shallow-copy
, wird ein Element mit fehlender Template-Regel mit seinen Nachfolger-Elementen unverändert in die Ausgabe kopiert, mit Ausnahme der Knoten für die eine explizite Template-Regel existiert.
Was bewirkt der Attribut-Wert shallow-skip
bei on-no-match
?
Ist der Attributwert shallow-skip
, wird für ein Element mit fehlender Template-Regel weder der textuelle Inhalt noch das Markup ausgegeben, es sei denn, es gibt eine explizite Template-Regel.
Was bewirkt der Attribut-Wert text-only-copy
bei on-no-match
?
Ist der Attributwert text-only-copy, wird der textuelle Inhalt ohne das Markup in die Ausgabe übernommen, es sei denn, es existiert eine explizite Template-Regel. Dies ist das Default-Verhalten, wenn kein Element <xsl:mode>
vorhanden ist.
Was bewirkt der Attribut-Wert fail
bei on-no-match
?
Ist der Attributwert gleich fail
, wird verlangt, dass für jedes Item, das durch <xsl:apply-templates>
selektiert wird, eine explizite Template-Regel existieren muss. Ist dies nicht der Fall, bricht die Transformation mit einer Fehlermeldung ab.
Wie kann das Verhalten beim Vorliegen von mehr als einer passenden Template-Regel festgelegt werden?
Das Verhalten beim Vorliegen von mehr als einer passenden Template-Regel für einen Knoten wird über das Attribut on-multiplematch
festgelegt. Folgende Werte sind erlaubt:
* use-last: Die letzte passende Regel wird angewandt.
* fail: Die Transformation wird mit einer Fehlermeldung abgebrochen.
Welches Problem besteht bei der Ausgabe von Textinhalten, welche beiden Möglichkeiten gibt es das zu umgehen?
Häufig bleiben Weißraumzeichen (Leerzeichen, Zeilenumbrüche, …) nicht erhalten.
Eine Möglichkeit, die Ausgabe dieser Zeichen zu erzwingen, ist die Verwendung von nummerischen Zeichen-Entities. Ein geschütztes Leerzeichen (non breaking space) kann mit  
kodiert werden, ein Zeilenumbruch (line feed) mit
.
XSLT bietet zudem das Element <xsl:text>
an. Alle Zeichen im Elementinhalt von <xsl:text>
, also auch Leerzeichen, Zeilenumbrüche und Tabulatorzeichen, werden als Textknoten in den Ausgabebaum übernommen.
Wie kann mit einem XPatch-Ausdruck eine Knotensequenz adressiert werden?
Standardmässig adressiert der XPath-Ausdruck in <xsl:value-of select="XPath-Ausseparator druck"/>
lediglich einen einzigen Knoten. Es ist aber möglich, dass der XPath-Ausdruck auch eine Knotensequenz adressiert, die aus mehr als einem Knoten besteht. Wird dem Element <xsl:value-of>
nun das Attribut separator
hinzugefügt:<xsl:value-of select="XPath-Ausdruck" separator="Zeichenkette"/>
werden die verketteten Stringwerte aller durch den XPath-Ausdruck adressierten Items, jeweils getrennt durch die als Attributwert von separator notierte Zeichenkette ausgegeben. Default-Wert von separator ist ein Leerzeichen.
Welche Alternative zu <xsl:value-of select="XPath-Ausdruck"/>
gibt es zur Ausgabe von Textknoten?
Als Alternative stehen seit Version 3.0 die Text-Value-Templates zur verfügung. Bei einem Text-Value-Template wird eine Zeichenkette, die innerhalb geschweifter Klammern steht, als XPath-Ausdruck ausgewertet.
Was ist bei Text-Value-Templates zu beachten und wo darf es eingesetzt werden?
Die Zeichenkete in geschweiften Klammern wird aber nur dann als XPath-Ausdruck ausgewertet, wenn beim Elternelement des Textknotens, das Attributexpand-text
den Wert true
hat. Das Attribut expand-text
darf bei jedem Element im Stylesheet, also auch beim Wurzelelement <xsl:stylesheet>
, vorkommen. Ist sein Wert true
, werden die Text-Knoten aller Nachfahrenelemente als Text-Value-Templates behandelt.
Was ist der Default-Wert von expand-text
und wieso? (2 Gründe)
Der Default-Wert des Attributes ist false
, d. h. dieses Feature ist standardmäßig deaktiviert. Ein Grund dafür ist die Sicherstellung der Abwärtskompatibilität. Weiterhin sollen Schwierigkeiten vermieden erden, wenn Inhalte erzeugt werden, die viele geschweifte Klammern enthalten, wie z. B. JavaScript-Code oder CSS-Stylesheets. In diesen Fällen müsste die geschweifte Klammer durch eine geschweifte Klammer maskiert werden. Dies ist schlecht lesbar und fehleranfällig.
Wie können während der Transformation dynamische Attributwerte erstellt werden? (2 Möglichkeiten)
- Verwendung eines Attributwert-Templates (attribute value template)
der XPath-Ausdruck, der den gewünschten Attributwert liefert, in geschweifte Klammern gesetzt. So erkennt der Prozessor, dass dieser Ausdruck ausgewertet werden muss. Die Syntax lautet:<element attribut="{XPath-Ausdruck}"> ... </element>
- Verwendung des Elementes
<xsl:attribute>
<xsl:attribute>
wird als Kindelement des Elementes, zu dem das Attribut gehören soll, notiert. Der Attributname wird als Wert dem Attribut name hinzugefügt. Der Ausdruck, der den Attributwert liefert, wird als Inhalt von<xsl:attribute>
angegeben.
Dies wird verwendet, wenn zur Ermittlung des Attributwertes komplexere Auswertungen, z. B. Fallunterscheidungen, erforderlich sind
Die Syntax lautet also:
~~~
<element>
<xsl:attribute>
<!-- Ausdruck -->
</xsl:attribute>
</element>
~~~
Wie kann in XSLT eine Gruppe von Attributen in mehreren Elementen verwendet werden und wie wird es verwendet?
Die Attribute können in einer sogenannten Attributmenge gesammelt werden. In XSLT ist dazu das Top-Level-Element <xsl:attribute-set>
vorgesehen. Die Syntax zur Definition einer Attributmenge lautet:
~~~
<xsl:attribute-set>
<xsl:attribute>...</xsl:attribute>
<xsl:attribute>...</xsl:attribute>
...
</xsl:attribute-set>
~~~
Die Attributmenge wird einem Element hinzugefügt, indem das Element das Attribut xsl:use-attribute-sets
erhält. Als Attributwert können die Namen mehrerer Attributmengen, jeweils getrennt durch ein Leerzeichen, angegeben werden:<element xsl:use-attribute-sets="SetName1 SetName2">...</element>
Wie kann das Ausgabeformat des Ergebnisdokuments festgelegt werden?
Mit <xsl:output>
wird das Ausgabeformat des Ergebnisdokumentes festgelegt. Es dient dazu, genauere Festlegungen über das Format des Ergebnisdokumentes zu treffen.
Es ist möglich, mehrere <xsl:output>
-Deklarationen zu notieren und auch zu benennen.
Wo wird <xsl:output> notiert, was passiert wenn das Element fehlt, wie ist es aufgebaut und welche 7 Attribute kann es besitzen?</xsl:output>
<xsl:output>
ist ein Top-Level-Element, d. h. es darf als direktes Kindelement von <xsl:stylesheet>
notiert werden.
Fehlt das Element, versucht der Prozessor die Ausgabemethode am Wurzelelement des Ergebnisdokumentes zu erkennen.<xsl:output>
ist stets ein leeres Element und verfügt über entsprechende Attribute zur Festlegung des Ausgabeformates.
Attribute:
* method
* html-version
* doctype-public
* doctype-system
* encoding
* indent
* name
Was bewirkt das Attribut method
bei <xsl:output>
, was sind die Attributwerte?
Das Attribut method
legt den Dokumenttyp des Ergebnisdokumentes fest. Mögliche Attributwerte sind:
* xml : Erzeugt wohlgeformtes XML. Dies ist das Default-Format, wenn das Wurzelelement des Ergebnisdokumentes nicht html ist.
* html : Erzeugt HTML.
* xhtml: Erzeugt XHTML (ab XSLT 2.0).
* text : Erzeugt ein einfaches Textdokument.
* json : Erzeugt JSON-Format (ab XSLT 3.0).
Was bewirkt das Attribut html-version
bei <xsl:output>
, was sind die Attributwerte?
Hat das Attribut method
den Wert html
oder xhtml
, kann mit dem Attribut html-version die genaue HTML- oder XHTMLVersion des Ergebnisdokumentes festgelegt werden.
Was bewirken die Attribute doctype-system
und doctype-public
bei <xsl:output>
, was sind die Attributwerte?
Soll das Ergebnisdokument valide zu einer bestimmten DTD sein, muss das XSLT-Stylesheet passend entwickeln werden. Mit den Attributen doctype-public
und doctype-system
können DOCTYPE-Deklarationen eingefügt werden, um eine anschließende Validierung zu ermöglichen. Wird doctype-public
verwendet, muss auch das Attribut doctype-system notiert werden.
Bei doctype-system
wird der URI einer privaten DTD, bei doctype-public
die einer öffentlichen DTD angegeben.
Was bewirkt das Attribut encoding
bei <xsl:output>
, was ist der default Wert?
Mit dem Attribut encoding
können Angaben über den Zeichensatz des Ergebnisdokumentes gemacht werden. Ist das Ausgabeformat xml, wird der angegebene Wert in die XML-Deklaration übernommen. Ist das Ausgabeformat html, bekommt das Attribut charset im meta-Element des Ausgabedokumentes diesen Wert.
Default-Wert von encoding ist UTF-8.
Was bewirkt das Attribut indent
bei <xsl:output>
, was ist der default Wert?
Ist der Attributwert von indent
auf yes
gesetzt, wird der Quelltext des Ergebnisdokumentes mit Einrückungen und Zeilenumbrüchen formatiert, um eine bessere Lesbarkeit zu erreichen.
Der Default-Wert dieses Attributes ist no
.
Was bewirkt das Attribut name
bei <xsl:output>
?
Mit dem Attribut name
kann eine <xsl:output>
-Deklaration benannt werden. Werden durch <xsl:result-document>
mehrere Ausgabedokumente erzeugt, kann ein benanntes Ausgabeformat jedem erzeugten Dokument zugewiesen werden.
Wie kann mit XSLT eine einfache Fallunterscheidung formulieren?
Eine einfache Fallunterscheidung lässt sich mit <xsl:if>
realisieren. Die Syntax lautet:
~~~
<xsl:if>
...
</xsl:if>
~~~
Als Attributwert von test
wird ein XPath-Ausdruck formuliert, der einen booleschen Wert liefert. Ist der Ausdruck true
, wird der Inhalt des <xsl:if>
-Containers ausgeführt, im anderen Fall wird er übersprungen.
Innerhalb des logischen Ausdruck können insbesondere auch XPath-Funktionen genutzt werden
Was ist eine komplexe Fallunterscheidung und wie wird sie formuliert?
Die <xsl:if>
-Anweisung hat keinen else
-Teil. Ein »if-else
« kann jedoch mit Hilfe der komplexen Fallunterscheidung <xsl:choose>
realisiert werden.
Komplexe Fallunterscheidungen (Mehrfachverzweigungen) sind dem Element <xsl:choose>
möglich. Innerhalb dieses Elementes können mit <xsl:when test="XPath-Ausdruck">
mehrere Bedingungen formuliert werden. Mit <xsl:otherwise>
kann der Default-Fall angegeben werden, falls keine der Bedingungen zutrifft.
Die Syntax lautet:
~~~
<xsl:choose>
<xsl:when>
...
</xsl:when>
<xsl:when>
...
</xsl:when>
...
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
~~~
Wie werden in XSLT schleifen (Iteration/Loop) programmiert?
Mit <xsl:for-each select="XPath-Ausdruck">
kann eine Iteration programmiert werden. Es wird über alle Knoten iteriert, die der XPath-Ausdruck im select
-Attribut auswählt, und die Anweisungen innerhalb von <xsl:for-each>
werden ausgeführt.
Syntax:
~~~
<xsl:for-each>
...
</xsl:for-each>
~~~
Der XPath-Ausdruck im select
-Attribut wählt eine Knotensequenz aus. Für jeden Knoten dieser Knotensequenz führt der Prozessor nun alle Anweisungen aus, die innerhalb des <xsl:foreach>
-Elementes stehen.
Was ist der Unterschied zwischen for-each
und apply-templates
, wo wird welches eingesetzt?
-
<xsl:for-each>
: wird auch Pull Processing genannt. Die zu verarbeitenden Knoten weren vom Prozessor aus der Eingabe in die Template-Regel »gezogen«.
Das Stylesheet kann aus nur einer einzigen Template-Regel bestehen, wobei die Struktur der gewünschten Ausgabe den Ablauf bestimmt. -
<xsl:apply-templates>
: wird auch Push Processing genannt. Die Behandlung der Kindknoten wird durch<xsl:apply-templates>
an passende Template-Regeln delegiert.
Im Stylesheet sind viele kleine Template-Regeln vorhanden, die Abarbeitung wird durch die Baumstruktur des Eingabedokumentes bestimmt.
Wie kann ein Element erstellt werden, dessen Name erst zur Laufzeit berechnet wird?
Mit der Anweisung <xsl:element>
ist es möglich, Elemente, deren Name erst zur Laufzeit berechnet wird, dem Ergebnisdokument hinzuzufügen.
Die Syntax lautet:
~~~
<xsl:element>
Elementinhalt
</xsl:element>
Berechnet werden kann der Elementname, wenn als Wert des `name`-Attributes ein Attributwert-Template notiert wird:
<xsl:element>
Elementinhalt
</xsl:element>
~~~
Ebenso ist auch die Verwendung des Elementes <xsl:attribute>
möglich.
Wann sollen Elemente kopiert werden können, wleche Elemente stehen dazu zur verfügung?
Wenn Elemente im Ergebnisdokument identisch zu Elementen im XML-Quelldokument sein sollen, was z. B. bei einer XML-zu-XML-Transformation oder, wenn im XML-Dokument bereits HTML-Elemente verwendet werden, der Fall ist. Es bietet sich an, diese Elemente des Quelldokuments in das Ergebnisdokument zu kopieren. XSLT stellt hierzu die beiden Elemente <xsl:copy>
und <xsl:copy-of>
zur Verfügung.