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.