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 ausxsl:for-each– Schleife über eine Knotenmenge (Pull-Stil)xsl:if/xsl:choose/xsl:when/xsl:otherwise– Bedingungenxsl:call-template/xsl:param/xsl:variable– benannte Templates und Variablenxsl: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:messageauszugeben
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.