XSLT (Extensible Stylesheet Language Transformations) ist eine deklarative Sprache des W3C, mit der sich XML-Dokumente in andere Formate überführen lassen – etwa XML in HTML, Text oder ein anderes XML-Schema. Ein XSLT-Stylesheet ist selbst eine XML-Datei und besteht aus Templates (Schablonen), die auf Knoten des Quellbaums passen.

XML selbst ist als vereinfachte Teilmenge aus der SGML hervorgegangen — deren Deklarationen und Entitaeten-Konzepte erklaert der Artikel SGML-Befehle.

Erste Schritte

Ein Stylesheet beginnt mit der Root-Deklaration und dem Template für das Wurzelelement:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html><body>
      <xsl:apply-templates/>
    </body></html>
  </xsl:template>
</xsl:stylesheet>

Verarbeitet wird die Datei zum Beispiel mit xsltproc style.xsl quelle.xml > ausgabe.html (GNOME/libxslt) oder mit Saxon (Java/.NET).

Die wichtigsten XSL-Elemente

  • xsl:template match – definiert eine Regel für passende Knoten (XPath-Muster)
  • xsl:apply-templates – verarbeitet Kindknoten weiter (Push-Stil)
  • xsl:value-of select – gibt den Wert eines Ausdrucks aus
  • xsl:for-each – Schleife über eine Knotenmenge (Pull-Stil)
  • xsl:if / xsl:choose / xsl:when / xsl:otherwise – Bedingungen
  • xsl:call-template / xsl:param / xsl:variable – benannte Templates und Variablen
  • xsl:output – legt das Zielformat fest (method="html|xml|text")
  • xsl:include / xsl:import – Stylesheets wiederverwenden

Die Pfadausdrücke stammen aus XPath (/katalog/buch, //autor, @id).

XSLT 2.0 und 3.0

XSLT 1.0 wurde 1999 Standard, 2.0 folgte 2007 und 3.0 2017. Neuere Versionen bringen XPath 2.0/3.0, Gruppierung mit xsl:for-each-group, eigene Funktionen (xsl:function), Higher-Order-Funktionen, JSON-Output und Streaming für sehr große Dokumente mit.

Praxis-Tipps

  • Push-Stil (apply-templates) ist wartbarer als tief verschachtelte for-each-Schleifen
  • Für Datenmigration zwischen XML-Schemata, Dokumentation (DocBook zu HTML) und ePub-Builds ist XSLT ein Klassiker
  • Zum Debuggen hilft es, Zwischenergebnisse mit xsl:message auszugeben

Verwandte Grundlagen: XML, HTML & CSS, Markdown, YAML, TOML und JSON, Regex. Wer strukturierte Daten in der Shell verarbeiten will, nutzt Nushell; automatisierte Transformations-Workflows lassen sich mit Expect steuern.