XSLT in der Praxis – XML clever transformieren

tiny-tool.de
XSLT – das klingt erstmal technisch, vielleicht sogar ein bisschen trocken. Aber wer mit XML-Daten arbeitet, wird diese Transformationssprache lieben lernen. Denn XSLT ist ein mächtiges Werkzeug, um strukturierte Daten automatisch umzuwandeln – etwa in HTML, Text oder andere XML-Formate.
Was ist XSLT eigentlich?
Du hast eine große XML-Datei mit Produktdaten? Oder ein strukturiertes Exportformat aus einer Datenbank? Mit XSLT kannst du daraus eine HTML-Tabelle, eine druckbare PDF-Datei (in Verbindung mit XSL-FO) oder eine vereinfachte XML-Struktur für andere Systeme erzeugen – und das alles regelbasiert und automatisiert.
Warum lohnt sich der Einsatz?
- Trennung von Inhalt (XML) und Darstellung (z. B. HTML-Ausgabe)
- Automatisierung von wiederkehrenden Umwandlungen
- Plattformunabhängigkeit durch reine Textverarbeitung
- Integration in moderne Build- und Datenverarbeitungspipelines
Und das Beste: XSLT ist vollständig standardisiert und funktioniert mit vielen Tools – von der Kommandozeile über Java-Anwendungen bis hin zu Webbrowsern.
Ein erstes Beispiel – XML nach HTML transformieren
Angenommen, du hast eine XML-Datei mit einer Liste von Büchern. Ziel ist es, daraus eine HTML-Tabelle zu erzeugen, die sich direkt im Browser anzeigen lässt. Hier ist die Ausgangsstruktur:
<buchliste>
<buch>
<titel>XSLT verstehen</titel>
<autor>Lisa Beispiel</autor>
<veroeffentlichungsjahr>2024</veroeffentlichungsjahr>
</buch>
<buch>
<titel>XML in Aktion</titel>
<autor>Mark Mustermann</autor>
<veroeffentlichungsjahr>2023</veroeffentlichungsjahr>
</buch>
</buchliste>
Mit XSLT kannst du diese Daten ganz einfach in eine übersichtliche Tabelle verwandeln:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Bücherliste</h2>
<table border="1">
<tr>
<th>Titel</th>
<th>Autor</th>
<th>Jahr</th>
</tr>
<xsl:for-each select="buchliste/buch">
<tr>
<td><xsl:value-of select="titel"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="veroeffentlichungsjahr"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
So sieht das Ergebnis im Browser aus
Titel | Autor | Jahr |
---|---|---|
XSLT verstehen | Lisa Beispiel | 2024 |
XML in Aktion | Mark Mustermann | 2023 |
🧠 Ziel
Die Bücher sollen nach veroeffentlichungsjahr
sortiert angezeigt werden, ältestes Buch zuerst.
✅ Erweiterte XSLT-Transformation (mit Sortierung)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Bücherliste (sortiert nach Erscheinungsjahr)</h2>
<table border="1">
<tr>
<th>Titel</th>
<th>Autor</th>
<th>Jahr</th>
</tr>
<xsl:for-each select="buchliste/buch">
<xsl:sort select="veroeffentlichungsjahr" data-type="number" order="ascending"/>
<tr>
<td><xsl:value-of select="titel"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="veroeffentlichungsjahr"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
🖼️ Ergebnis (HTML-Ausgabe)
Titel | Autor | Jahr |
---|---|---|
XML in Aktion | Mark Mustermann | 2023 |
XSLT verstehen | Lisa Beispiel | 2024 |
✅ XSLT mit Bedingung (xsl:if
)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Bücherliste (ab Jahr 2024)</h2>
<table border="1">
<tr>
<th>Titel</th>
<th>Autor</th>
<th>Jahr</th>
</tr>
<xsl:for-each select="buchliste/buch">
<xsl:if test="veroeffentlichungsjahr > 2023">
<tr>
<td><xsl:value-of select="titel"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="veroeffentlichungsjahr"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
✅ XSLT mit direkter Filterung (empfohlen)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Bücherliste (nur neuere Veröffentlichungen)</h2>
<table border="1">
<tr>
<th>Titel</th>
<th>Autor</th>
<th>Jahr</th>
</tr>
<xsl:for-each select="buchliste/buch[veroeffentlichungsjahr > 2023]">
<tr>
<td><xsl:value-of select="titel"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="veroeffentlichungsjahr"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
📄 Beispielausgabe (HTML)
- XML in Aktion – Mark Mustermann (2023)
- XSLT verstehen – Lisa Beispiel (2024)
Hinweis für Leser:
Diese Schreibweise ist nicht nur kürzer, sondern auch performanter – die Bedingung wird bereits bei der Selektion der Knoten geprüft, nicht erst innerhalb der Schleife.
🧠 Ziel
-
Wenn
@format = "E-Book"
→ Text fett anzeigen -
Sonst (z. B. Taschenbuch) → kursiv darstellen
✅ XSLT mit
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<h2>Bücherliste mit Format-Hervorhebung</h2>
<ul>
<xsl:for-each select="buchliste/buch">
<li>
<xsl:choose>
<xsl:when test="@format = 'E-Book'">
<strong><xsl:value-of select="titel"/></strong>
</xsl:when>
<xsl:otherwise>
<em><xsl:value-of select="titel"/></em>
</xsl:otherwise>
</xsl:choose>
– <xsl:value-of select="autor"/>
(<xsl:value-of select="veroeffentlichungsjahr"/>)
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
🧠 Was ist neu in XSLT 3.0?
Dank xsl:output method="json"
und Funktionen wie map
, array
, serialize()
kannst du native JSON-Strukturen erzeugen – kein manuelles Escaping mehr!
✅ Beispiel: Bücherliste als JSON ausgeben (XSLT 3.0)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.0">
<xsl:output method="json" indent="yes"/>
<xsl:template match="/">
<xsl:map>
<xsl:map-entry key="'buecher'">
<xsl:array>
<xsl:for-each select="/buchliste/buch">
<xsl:map>
<xsl:map-entry key="'titel'">
<xsl:value-of select="titel"/>
</xsl:map-entry>
<xsl:map-entry key="'autor'">
<xsl:value-of select="autor"/>
</xsl:map-entry>
<xsl:map-entry key="'jahr'">
<xsl:value-of select="veroeffentlichungsjahr"/>
</xsl:map-entry>
<xsl:map-entry key="'format'">
<xsl:value-of select="@format"/>
</xsl:map-entry>
</xsl:map>
</xsl:for-each>
</xsl:array>
</xsl:map-entry>
</xsl:map>
</xsl:template>
</xsl:stylesheet>
📤 Ergebnis (automatisch generiertes JSON)
Beispielausgabe: JSON nach Transformation
{
"buecher": [
{
"titel": "XSLT verstehen",
"autor": "Lisa Beispiel",
"jahr": 2024,
"format": "E-Book"
},
{
"titel": "XML in Aktion",
"autor": "Mark Mustermann",
"jahr": 2023,
"format": "Taschenbuch"
}
]
}
🧾 Fazit
🔗 Weiterführende Links
- W3Schools – XSLT Tutorial
- MDN – XSLT Überblick
- Tutorialspoint – XSLT Tutorial
- Altova XMLSpy – XSLT Editor
- Liquid Technologies – XSLT Editor & Debugger
- XSLT Fiddle – Online XSLT Editor
- XSLT Test Tool – Online Transformation
- FreeFormatter – XSL Transformer
- Linang Data – XSLT Tester (1.0/2.0/3.0)
- Saxon – XSLT 3.0 Prozessor
- Stylus Studio – XSLT Tools
- Altova – XSLT Tools Übersicht
- Oxygen XML Editor – XSLT Unterstützung
- W3C – Offizielle XSLT-Spezifikation
- Zeus – Commons – Apis