Elemente innerhalb von Templates, die nicht dem XSLT-Namensraum angehören, sowie Text werden vom XSLT-Prozessor weitgehend unbesehen in das Zieldokument übernommen:
<xsl:template> <html> <head> <title>Dies ist einfacher Text</title> </head> </html> </xsl:template>
Die einzige Ausnahme bilden sogenannte "Attribute Value Templates": Attributwerte, die in geschweiften Klammern stehen, werden durch den Wert ersetzt, der als Ergebnis der Auswertung des Inhalts als XPath-Ausdruck herauskommt:
<xsl:template> <xsl:param name="x">test.gif</xsl:param> <img src="{$x}" /> </xsl:template>
Es gibt auch die Möglichkeit, Textknoten direkt zu generieren:
<xsl:template> <xsl:text disable-output-escaping="yes"> < </xsl:text> </xsl:template>
Setzt man den Parameter disable-output-escaping
auf "yes", so wird bei der Ausgabe keine Entity-Codierung vorgenommen, d. h. das obere Codefragment erzeugt als Ausgabe ein "<".
Eine weitere Möglichkeit ist, Ergebnisse von XPath-Ausdrücken direkt auszugeben:
<xsl:template> <xsl:value-of select="$x + 2" /> </xsl:template>
Auch Elemente und Attribute können generiert werden:
<xsl:template> <xsl:element name="img"> <xsl:attribute name="src"> <xsl:value-of select="@source"/> </xsl:attribute> </xsl:element> </xsl:template>
Dieser Code erzeugt ein img-Tag, dessen src-Attribut den Wert des source-Attributs des Elements im Quelldokument hat.
Um die Verwendung häufig gebrauchter Attribute zu vereinfachen, kann man sogenannte "Attribute Sets" als Toplevel-Element deklarieren:
<xsl:attribute-set name="as1"> <xsl:attribute name="width"> 640 </xsl:attribute> <xsl:attribute name="height"> 480 </xsl:attribute> </xsl:attribute-set> <xsl:template> <xsl:element name="img" use-attribute-sets="as1"/> </xsl:template>
Ähnlich wie Elemente lassen sich auch Kommentare und PIs generieren:
<xsl:template> <xsl:comment>Dies ist ein Kommentar</xsl:comment> <xsl:processing-instruction name="pi"> mal Daumen </xsl:processing-instruction> </xsl:template>
Ergebnis:
<!--Dies ist ein Kommentar--> <?pi mal Daumen?>
copy
erzeugt eine Kopie des Knotens im Quelldokument. Attribute und untergeordnete Knoten werden jedoch nicht mitkopiert. Es ist aber möglich, Attribute-Sets zu verwenden:
<xsl:template> <xsl:copy use-attribute-sets="as1"/> </xsl:template>
Will man eine vollständige Struktur aus dem Quelldokument kopieren, so verwendet man copy-of
:
<xsl:template> <xsl:copy-of select="."/> </xsl:template>
Zum Schluß gibt es noch die Möglichkeit, Numerierungen einzufügen. Der einfache Weg ist, einfach eine vorgegebene Zahl zu formatieren:
<xsl:template> <xsl:number value="$x" format="1. "/> </xsl:template>
Ergebnis: "<Inhalt von x>. "
Komplizierter wird es, wenn Knoten automatisch gezählt werden sollen. Soll die Zahl etwa das n-te td-Element wiedergeben, so ist folgender Code notwendig:
<xsl:template> <xsl:number count="td" from="body" format="1. "/> </xsl:template>
Es werden hier alle td
-Elemente gezählt, beginnend beim body
-Element, und die Nummer des aktuellen Knotens wird im Format "x. " ausgegeben.