XSL Transformation, kurz XSLT, ist eine Programmiersprache zur Transformation von XML-Dokumenten. Sie ist Teil der Extensible Stylesheet Language (XSL) und stellt eine universelle (Turing-vollständige)Universal Turing Machine in XSLT. Unidex, Inc. (englisch). Sprache dar.

XSLT wurde vom World Wide Web Consortium (W3C) am 8. Oktober 1999 als Empfehlung veröffentlicht. XSLT baut auf der logischen Baumstruktur eines XML-Dokumentes auf und dient zur Definition von Umwandlungsregeln. XSLT-Programme, sogenannte XSLT-Stylesheets, sind dabei selbst nach den Regeln des XML-Standards aufgebaut.

Die Stylesheets werden von spezieller Software, den XSLT-Prozessoren, eingelesen, die mit diesen Anweisungen ein oder mehrere XML-Dokumente in das gewünschte Ausgabeformat umwandeln.

XSLT ist eine Untermenge von XSL, zusammen mit XSL-FO und XPath.

Geschichte Ursprünglich sollte mit XSL eine DSSSL-artige Sprache in XML-Syntax entstehen. Schnell war jedoch klar, dass eine solche Sprache eigentlich aus drei interagierenden, aber unabhängig voneinander einsetzbaren Teilen besteht: Einer Sprache für die Beschreibung eines Dokuments als Baum mit Formatierungsanweisungen und Stilangaben: XSL Formatting Objects (XSL-FO) Einer Sprache für die Transformation eines beliebigen XML-Dokuments in einen anderen Baum, z. B. einen in XSL-FO: XSLT Einer Sprache für die Adressierung von Baumbestandteilen: XPath

Die deklarative, funktional-applikative Sprache XSLT ist u. a. aus DSSSL hervorgegangen. Entwickelt wurde XSLT ursprünglich von James Clark (XSLT 1.0, XSLT 1.1), für die derzeitige Weiterentwicklung ist Michael Kay verantwortlich. Seit dem 23. Januar 2007 ist XSLT 2.0 eine „Recommendation“ (Empfehlung) des W3C und hat damit die seit 1999 gültige Version XSLT 1.0 abgelöst. Inzwischen existiert auch eine Version XSLT 3.0XSLT 3.0 als Candidate Recommendation vom November 2015 des W3C, welche bereits durch den Saxon-Parser unterstützt wird.Saxon 9.8 product comparison (Feature Matrix)

Unterstützung in Webbrowsern Webbrowser unterstützen XSLT überwiegend in der Version 1.0. Die Nutzung browserseitiger XSLT-Transformationen ist jedoch gering. Nach Erhebungen wurden 2013 rund 0,02 % aller Webseiten und 2025 etwa 0,001 % der Webseiten mit XSLT ausgeliefert. Als Ersatz für die native Browserunterstützung existieren WebAssembly-basierte Polyfills von Drittanbietern, die XSLT-Transformationen ermöglichen.

Implementierungen der XSLT-Unterstützung in Webbrowsern waren wiederholt von Sicherheitslücken betroffen und verursachten einen vergleichsweise hohen Wartungsaufwand. Bereits 2013 wurde im Chromium-Projekt die Entfernung der XSLT-Unterstützung vorgeschlagen. Das Vorhaben wurde nach Rückmeldungen von Nutzern und Entwicklern, die XSLT weiterhin in bestehenden Anwendungen einsetzten, zunächst zurückgestellt.

2025 wurde die XSLT-Unterstützung in der Chromium-Engine offiziell als veraltet eingestuft. Als Begründung nannte das Chromium-Projekt Sicherheitsaspekte, den Wartungsaufwand sowie die geringe Nutzung. Die Entfernung aus den stabilen Chromium-Versionen ist für November 2026 vorgesehen. Auch die Projekte Gecko und WebKit haben angekündigt, ihre XSLT-Unterstützung künftig entfernen zu wollen. Ein konkreter Zeitplan wurde hierfür bislang nicht veröffentlicht.

Funktionsweise mini|200px|Vereinfachte Darstellung der Funktionsweise von XSLT – Ein XML-Dokument wird mittels eines XSLT-Dokuments und eines verarbeitenden Prozessors in ein neues Dokument überführt (.xml, .xhtml, .html, .txt, …). Die Sprache XSLT beschreibt die Umwandlung eines XML-Derivats (auch XML-Dialekt oder XML-Anwendung genannt), in Form eines XML-Dokuments, in ein anderes Dokument, Transformation genannt. Das resultierende Dokument entspricht meist der XML-Syntax, es können aber auch andere Textdateien und sogar Binärdateien erstellt werden.

Dazu werden die XML-Dokumente als logischer Baum betrachtet: Die Quellbäume der zu transformierenden Dokumente und die durch die Transformation entstehenden Zielbäume der zu erzeugenden Dokumente.

Eine Transformation besteht aus einer Reihe von einzelnen Transformationsregeln, die Templates (deutsch „Schablonen“) heißen. Ein Template besitzt ein auf XPath basierendes Pattern (deutsch „Muster“), das beschreibt, für welche Knoten es gilt, und einen Inhalt, der bestimmt, wie das Template seinen Teil des Zielbaums erzeugt.

In einem XSLT-Dokument kommen also an Sprachen und XML-basierten Technologien mindestens vor: XML als Basis für XSLT XSLT selbst (XML-basiert) XPath / XSLT Patterns Die Sprache(n) des Quell-Dokuments (XML-basiert, z. B. DocBook) Die Sprache(n) des Ziel-Dokuments (häufig XML-basiert, z. B. XML, XSLT selbst, aber auch HTML oder RELAX NG, Text-Format auch möglich) XML Namespaces zur Unterscheidung der einzelnen verwendeten Sprachen Sowie ab XSLT 2.0: „XML-Schema“-Datentypen XHTML Sowie ab XSLT 3.0: Maps und Arrays als zusätzliche Datenstrukturen Funktionen als Werte (function items) Streaming zur Verarbeitung großer XML-Dokumente Packages zur Modularisierung von XSLT-Anwendungen erweiterte Fehlerbehandlung Verarbeitung von JSON-Daten

Template Rules und Conflict Resolution Template Rules (deutsch „Schablonen-Regeln“) werden immer dann angewendet, wenn eine bestimmte Bedingung passt. Das folgende Beispiel schließt den Inhalt aller Titel („title“-Tags) in „em“-Tags ein, egal wo sie im Dokument vorkommen. Alle anderen Inhalte werden nach anderen oder den Default-Regeln verarbeitet. <xsl:template match="title"> <em> <xsl:apply-templates/> </em> </xsl:template> <xsl:apply-templates/> transformiert die Kindelemente des aktuellen Elements mittels sämtlicher dafür anwendbarer Regeln.

Conflict Resolution (deutsch „Konfliktauflösung“) wird dann benötigt, wenn ein Knoten zu mehreren Template Rules gleichzeitig passt. In solchen Fällen gelten die folgenden Regeln. Importierte Regeln haben niedrigere Priorität. Wenn ein Attribut priority gegeben ist, wird es berücksichtigt. Spezifischere Patterns haben höhere Priorität als weniger spezifische. So ist beispielsweise der Test, ob irgendein Knoten existiert, weniger spezifisch als ein Test für einen Knoten mit konkretem Namen. Wenn es mehrere gleichberechtigte Regeln gibt, ist das ein Fehler, und wird vom XSLT-Prozessor als Meldung ausgegeben.

Sortierung und bedingte Ausgabe Um Elemente zu sortieren, kann ein Tag for-each mit einem sort kombiniert werden. Die Schleife läuft dann nicht in der Reihenfolge der Knoten des Originaldokuments, sondern in alphabetischer oder numerischer Reihenfolge. Im folgenden Beispiel werden alle Buch-Elemente aufsteigend nach ihrem Preis sortiert. <xsl:for-each select="buch"> <xsl:sort select="preis" order="ascending" /> <!-- weitere Verarbeitung der sortierten Elemente --> </xsl:for-each> Mit oder ohne order="ascending" ist die Reihenfolge immer die gleiche (aufsteigend), da dies die Default-Einstellung ist. Mit order="descending" erhält man eine absteigende Reihenfolge.

XSLT bietet sowohl binäre Entscheidungen mittels des Tags if als auch mehrfache Entscheidungen über das Tag choose. Das folgende Beispiel gibt genau dann ein Sternchen aus, wenn das Attribut nationality des Elements author den Wert „U.S.“ hat. <xsl:if test="author/@nationality='U.S.'">*</xsl:if>

Um mehrere Fallunterscheidungen zu treffen, kann die Kombination aus den Tags choose und when verwendet werden. <xsl:choose> <xsl:when test="...">...</xsl:when> <xsl:when test="...">...</xsl:when> <xsl:when test="...">...</xsl:when> <xsl:otherwise>...</xsl:otherwise> </xsl:choose>

Text unverändert ausgeben Um durch XSLT beliebigen Text ausgeben zu lassen, kann das Tag <xsl:text> verwendet werden, wobei das Escaping (die Ausgabe von „<“ und „&“ als „&lt;“ und „&amp;“) abgeschaltet werden kann. Der Inhalt kann als normaler Text oder in einem CDATA-Abschnitt stehen. Der Vorteil des CDATA-Abschnitts besteht darin, dass sein Inhalt nicht interpretiert wird, er kann also auch XML-Syntax enthalten.

Zum Beispiel erzeugt <xsl:text disable-output-escaping="yes"> <![CDATA[ ### Hier darf < & >>< beliebiger Text stehen ### ]]> </xsl:text> die Ausgabe: ### Hier darf < & >>< beliebiger Text stehen ###

Anwendungen mini|XML-Sprachen und deren Umfang Zwei wichtige Anwendungsgebiete für XSLT sind: POP (Presentation Oriented Publishing) bezeichnet die Transformation zum Zwecke der Darstellung. Mit unterschiedlichen Stylesheets können die Daten in XHTML, Formatting Objects (XSL-FO), SVG, SMIL, DocBook und viele andere Formate umgewandelt werden. Das Zieldokument muss hierbei nicht zwingend ein XML-Dokument sein. Das ursprüngliche semantische Markup wird dabei durch ein Stil-bezogenes Markup ersetzt. MOM (Message Oriented Middleware) bezeichnet die Transformation zum Zwecke des Datenaustausches. Da XML lediglich ein Sprachkonzept zur Entwicklung von Sprachen bildet, genügt es nicht, dass zwei Systeme (z. B. Programme) XML beherrschen, um gegenseitig Daten austauschen zu können. Sie müssen die gleiche XML-basierte Sprache verwenden. In dem häufigen Fall, in dem die Systeme nicht die gleiche XML-basierte Sprache verwenden, wird gerne XSLT eingesetzt, um mit Hilfe von Transformationen Übersetzer von der einen Sprache in die andere zu entwickeln.

Beispiele für POP sind etwa: Statistische Daten liegen als XML vor (z. B. aus der Datenbank) und werden mit Hilfe unterschiedlicher Transformationen aufbereitet als Vektorgrafik in SVG Text Tabelle in XHTML PDF (über den Zwischenschritt XSL-FO) oder auch Excel-Tabelle (durch SpreadsheetML ab Office XP). Für eine Website werden die XHTML-Dateien oder XML-Dateien zunächst ohne Layout geschrieben und erhalten anschließend das Layout mit Hilfe einer Transformation. Der Vorteil ist dabei ähnlich dem eines klassischen CMS: Um das Layout zu ändern, ist es nicht notwendig, alle XHTML-Seiten zu ändern; stattdessen ändert man das Stylesheet und transformiert neu. Beispielsweise verwendet das XML Publishing System Apache Cocoon dieses Verfahren. Da moderne Webbrowser XSLT unterstützen, ist es möglich, die Quell-XML zu publizieren und im letzten Moment mit XSLT auf dem Client-Rechner transformieren zu lassen, sofern alle zu erwartenden Anwender über einen solchen Browser verfügen (z. B. in Firmen-Netzwerken). Andernfalls sollte die Quell-XML schon auf dem Server transformiert und das Ergebnis publiziert werden.

Kritik XSLT wird aufgrund seines deklarativen Programmiermodells und seiner XML-basierten Syntax häufig eine steile Lernkurve zugeschrieben. Zudem werden die Lesbarkeit und die Verarbeitungsleistung von XSLT im Vergleich zu anderen Ansätzen zur XML-Verarbeitung teilweise kritisch bewertet. Darüber hinaus gelten einzelne Implementierungen als veraltet. In der Praxis bevorzugen viele Entwickler für XML-Transformationen allgemeine Programmiersprachen anstelle von XSLT.

Alternativen zu XSLT DSSSL Eine mögliche Alternative zu XSLT ist DSSSL, das man auch als Vorläufer von XSLT betrachten kann. Der wohl größte Vorteil von XSLT gegenüber DSSSL ist seine XML-basierte Syntax. Somit kann jeder XML-Editor automatisch auch für XSLT eingesetzt werden, außerdem gelten die Syntax-Regeln von XML (Wohlgeformtheit, Gültigkeit) damit auch für XSLT. Dadurch ist es möglich, dass XSLT sich selbst bearbeitet, man kann also Transformationen zur Erzeugung und Bearbeitung von Transformationen entwickeln.

MetaMorphosis