Elementknoten erzeugen mit xsl:element
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 2.)
Die Instruktion xsl:element fügt, wie der Name bereits aussagt, der Ergebnissequenz einen Elementknoten hinzu. Sie stellt damit unter anderem eine etwas umständlich erscheinende Alternative zu einem Literal Result Element dar:
<element name="beispiel">Test</element>
könnte abgekürzt werden mit:
<beispiel>Test</beispiel>
Im Gegensatz zu einem Literal Result Element besteht bei der Instruktion allerdings die Möglichkeit, den Bezeichner des zu bildenden Elements (bei dem es sich um einen QName handeln muss) durch einen XPath-Ausdruck dynamisch zur Laufzeit zu erzeugen.
Einfacher ausgedrückt: Der Name des eingefügten Elements wird mittels eines AVT erst im Augenblick des Erzeugens festgelegt. Also:
<element name="{xpath-ausdruck}">Test</element>
Elementnamen können sich aus der Position eines Elements in der verarbeiteten Sequenz ergeben. In diesem wegen der wenigen in HTML dafür brauchbaren Tag-Namen etwas realitätsfernen Beispiel werden entsprechend dimensionierte Überschriften <h...> im Ergebnisdokument erzeugt (es dürften dann natürlich nie mehr als sechs Bücher sein):
<regal>
<buch>Das erste Buch</buch>
<buch>Das zweite Buch</buch>
<!-- mehr Bücher -->
...
</regal>
Hier ein Ausschnitt aus dem Stylesheet (das Attributwert-Template hängt positionsabhängig eine Ziffer an das »h« an):
...
<xsl:template match="buch">
<xsl:element name="h{fn:position()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
...
Im Ergebnisdokument:
<h1>Das erste Buch</h1>
<h2>Das zweite Buch</h2>
...
<h6>Das sechste Buch</h6>
Sie können mit dieser Herangehensweise auch Attributbezeichner in Elementnamen umwandeln, das Ergebnisdokument liegt dann in XML vor. Diese Anwendung hat, im Gegensatz zur vorhin gezeigten, durchaus Realitätsbezug.
Ausgangspunkt ist ein leeres Element <buch> mit mehreren Attributen:
<buch buchtitel="Wenn der Berg ruft" buchautor="Assmann, Peter" buchverlag="Berg Verlag" ersch-jahr="2004"/>
Dies wird folgendermaßen verarbeitet, die Funktion fn:name() liest dabei jeweils den Bezeichner des aktuellen Knoten aus:
<xsl:template match="buch">
<buch>
<xsl:for-each select="@*">
<xsl:element name="{fn:name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</buch>
</xsl:template>
Das Ergebnis ist ein Element <buch>, das keine Attribute mehr, dafür aber eine Reihe von Kindelementen besitzt:
<buch>
<buchtitel>Wenn der Berg ruft</buchtitel>
<buchautor>Assmann, Peter</buchautor>
<buchverlag>Berg Verlag</buchverlag>
<ersch-jahr>2004</ersch-jahr>
</buch>
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" 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.
Galileo Press, Rheinwerkallee 4, 53227 Bonn