Mehrfachverzweigung

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)
  1. Auswertung erfolgt von oben nach unten; bei dem ersten passenden <xsl:when> wird die Ausführung abgebrochen;
  2. <xsl:otherwise> darf nur nach allen <xsl:when>‑Elementen stehen;
  3. In Ausdrücken muss > als &gt; und < als &lt; 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 &gt; 160">
            <li>
                <xsl:value-of select="name"/>;
                <!-- Mehrfachprüfung: Alter fett anzeigen bei Größe > 200 -->
                <xsl:choose>
                    <xsl:when test="height &gt; 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)
  1. ActiveXObject wird nur von alten IE‑Browsern unterstützt, nicht von modernem Chrome und Firefox;
  2. 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.

  1. Auf der Backend‑Seite (Java/PHP/.NET u.a.) wird eine XSLT‑Engine benutzt, um XML + XSL vorab in XHTML umzuwandeln;
  2. Das fertige HTML‑Dokument wird direkt an den Browser geschickt;
  3. 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.

  1. Mit Pfadausdrücken werden Knoten im XML‑Dokument adressiert (ähnlich wie Dateipfade);
  2. Enthält eine eingebaute Standard‑Funktionsbibliothek für numerische Berechnungen und String‑Verarbeitung;
  3. Offizieller W3C‑Standard;
  4. Alle Ausdrücke innerhalb von select="" und test="" folgen der XPath‑Syntax.

Zusammenfassung

TagEinsatzbereichEigenschaft der Verzweigung
<xsl:if>Einfache BedingungsprüfungNur wahr‑Zweig, kein else
<xsl:choose>Mehrfache BedingungsverzweigungMehrere when + otherwise (entspricht else)

Mehrfachverzweigung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert