XSLT in der Praxis – XML clever transformieren

tiny-tool.de

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?

XSLT steht für Extensible Stylesheet Language Transformations und ist eine deklarative Sprache, mit der XML-Daten in andere Formate transformiert werden können. Dabei kommen sogenannte Templates zum Einsatz, die genau beschreiben, wie die Daten umgewandelt werden sollen.

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

XSLT ist weit mehr als ein Relikt aus XML-Zeiten – es ist ein flexibles, leistungsfähiges Werkzeug, das sich auch heute noch wunderbar in moderne Workflows integrieren lässt. Ob du saubere HTML-Ausgaben erzeugst, Daten filterst oder JSON für APIs generierst: Mit etwas Übung wird XSLT zu deinem zuverlässigen Begleiter bei der Transformation strukturierter Daten.