1. <xsl:choose> Mehrfach‑Bedingungsverzweigung
Syntaxaufbau (vergleichbar mit if … else if … else)
<xsl:choose>
<xsl:when test="Bedingungsausdruck">
Ausgabeinhalt bei erfüllter Bedingung
</xsl:when>
<xsl:when test="Bedingungsausdruck2">
Ausgabeinhalt bei erfüllter Bedingung 2
</xsl:when>
<xsl:otherwise>
Ausgabe, falls keine when‑Bedingung zutrifft (optional)
</xsl:otherwise>
</xsl:choose>Code-Sprache: HTML, XML (xml)
- Auswertung erfolgt von oben nach unten; bei dem ersten passenden
<xsl:when>wird die Ausführung abgebrochen; <xsl:otherwise>darf nur nach allen<xsl:when>‑Elementen stehen;- In Ausdrücken muss
>als>und<als<geschrieben werden.
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
<!-- Alle Schüler durchlaufen -->
<xsl:for-each select="class/student">
<!-- Aufsteigend nach Alter sortieren -->
<xsl:sort select="age"/>
<!-- Schüler mit Körpergröße über 160 herausfiltern -->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="name"/>;
<!-- Mehrfachprüfung: Alter fett anzeigen bei Größe > 200 -->
<xsl:choose>
<xsl:when test="height > 200">
<b><xsl:value-of select="age"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="age"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code-Sprache: HTML, XML (xml)
Ablauf: Durchlaufen → Sortieren nach Alter → Filter Größe > 160 → Alter fett darstellen, falls Größe über 200 liegt.
2. XSLT‑Transformation im Browser
Nicht alle Browser unterstützen XSLT. Man kann das mit den folgenden Methoden beheben. Heutzutage werden hauptsächlich Chrome und Firefox verwendet, daher tritt dieses Problem kaum noch auf, trotzdem ist es gut, davon zu wissen.
1: JavaScript‑Client‑Transformation (Alte IE‑Lösung)
Funktionsweise: Beim Laden der Seite wird JS ausgeführt, XML‑Datei und XSL‑Stylesheet eingelesen, die Transformation findet im Browser statt und HTML wird ausgegeben.
// XML laden
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// XSL laden
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// Transformieren und ausgeben
document.write(xml.transformNode(xsl));Code-Sprache: JavaScript (javascript)
ActiveXObjectwird nur von alten IE‑Browsern unterstützt, nicht von modernem Chrome und Firefox;- Hängt vom browserinternen XML‑Parser ab, die Kompatibilität ist schlecht.
2: Serverseitige Transformation
Kernidee: Die Transformation nicht im Browser ausführen
Die meisten Projekte nutzen diesen Ansatz. Die Transformation läuft auf dem Server, damit entfallen Browser‑Kompatibilitätsprobleme. Viele Unternehmen setzen diese Umsetzung ein.
- Auf der Backend‑Seite (Java/PHP/.NET u.a.) wird eine XSLT‑Engine benutzt, um XML + XSL vorab in XHTML umzuwandeln;
- Das fertige HTML‑Dokument wird direkt an den Browser geschickt;
- Vorteil: Kompatibel mit allen Browsern, der Client‑Browser braucht keine XSLT‑Unterstützung.
3. Grundlagen von XPath
XPath ist eine Abfragesprache für Pfade in XML‑Dokumenten und bildet die zentrale Grundlage von XSLT.
- Mit Pfadausdrücken werden Knoten im XML‑Dokument adressiert (ähnlich wie Dateipfade);
- Enthält eine eingebaute Standard‑Funktionsbibliothek für numerische Berechnungen und String‑Verarbeitung;
- Offizieller W3C‑Standard;
- Alle Ausdrücke innerhalb von
select=""undtest=""folgen der XPath‑Syntax.
Zusammenfassung
| Tag | Einsatzbereich | Eigenschaft der Verzweigung |
|---|---|---|
<xsl:if> | Einfache Bedingungsprüfung | Nur wahr‑Zweig, kein else |
<xsl:choose> | Mehrfache Bedingungsverzweigung | Mehrere when + otherwise (entspricht else) |
Mehrfachverzweigung