xsl:choose
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Die Instruktion xsl:choose wählt aus einer Gruppe von Template-Anweisungen diejenige aus, für die eine mit xsl:when gestellte Bedingung erfüllt ist. Ist keine der Bedingungen erfüllt, so tritt der Sequenzkonstruktor des optionalen xsl:otherwise-Containers in Kraft. Ist kein solcher enthalten, geschieht nichts.
Klassifizierung | Instruktion |
Funktionsgruppe | Bedingte Verarbeitung |
Einführung | XSLT 1.0 |
Position im Stylesheet und erlaubte Inhalte:
xsl:choose ist eine Instruktion und kann als solche nur unmittelbar oder mittelbar innerhalb eines Template-Anweisungsblocks xsl:template auftreten.
Als Inhalte erlaubt sind ein oder mehrere xsl:when-Elemente, sowie maximal ein abschließend auftretendes xsl:otherwise-Element. Literal Result Elements sind unmittelbar in xsl:choose nicht gestattet.
Attribute:
Es gelten lediglich die Standardattribute. Die Instruktion verfügt über keine elementspezifischen Attribute.
Verwendungszweck:
Ein xsl:choose-Element tritt niemals leer auf. Es enthält stets mindestens ein xsl:when-Element oder mehrere aufeinanderfolgende xsl:when-Elemente. Jedes dieser xsl:when besitzt ein (obligatorisches) Attribut test, das einen XPath-Ausdruck enthält, dessen Auswertung entweder true oder false ergibt. Der Sequenzkonstruktor der ersten xsl:when-Anweisung (und nur dieser), deren test-Bedingung erfüllt ist, wird ausgeführt. (Anmerkung: Die Spezifikation legt, entgegen früherer Versionen, ausdrücklich fest, dass weitere folgende, ebenfalls erfüllte xsl:when nicht ausgewertet werden.)
Nach dem oder den xsl:when-Element(en) kann maximal ein xsl:otherwise-Element stehen, dessen Sequenzkonstruktor defaultmäßig in Kraft tritt, wenn keine der vorangestellten xsl:when-Bedingungen erfüllt ist. Das xsl:otherwise-Element benötigt keine Testbedingung, entspricht also dem ELSE-Zweig einer IF-ELSE-Bedingung. Ist keine xsl:when-Bedingung erfüllt und ist kein xsl:otherwise-Element vorhanden, so bleibt der ganze Block xsl:choose ohne Wirkung.
Hinweis – Alternative xsl:if für einfache Bedingungen
Ein xsl:choose-Element mit nur einer einzigen xsl:when-Bedingung entspricht in der Wirkung exakt einer xsl:if-Anweisung. Im Gegensatz zu jener ist eine mit xsl:choose angelegte Bedingung jedoch ausbaubar und entspricht somit im Grunde einer IF-ELSE-IF- oder einer SWITCH-Konstruktion, wie sie aus anderen Programmiersprachen bekannt sind
Beispiele:
Beispiel 1 – Test eines Attributwertes:
<xsl:choose>
<xsl:when test="kennzeichen='PM'">Potsdam Mittelmark</xsl:when>
<xsl:when test="kennzeichen='MOL'">Märkisch Oberland</xsl:when>
<xsl:when test="kennzeichen='B'">Berlin</xsl:when>
...
<xsl:otherwise>
<xsl:value-of select="kennzeichen"/>
</xsl:otherwise>
</xsl:choose>
Das obere Beispiel gibt den Namen einer Stadt bzw. eines Landkreises in das Ergebnisdokument aus, in Abhängigkeit vom jeweiligen Autokennzeichenkürzel. Wird die vorliegende Abkürzung nicht erkannt, so wird die Abkürzung selbst ausgegeben.
Beispiel 2 – xsl:choose im Inneren von xsl:variable:
<xsl:variable name="breite">
<xsl:choose>
<xsl:when test="@breite">
<xsl:value-of select="@breite"/>
</xsl:when>
<xsl:otherwise>100</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Das zweite Beispiel deklariert zunächst eine Variable breite. Anschließend wird innerhalb des xsl:choose-Blocks mit einer xsl:when-Testbedingung überprüft, ob im Current Node ein breite-Attribut vorliegt. Falls das so ist, wird der Variable breite dessen Wert zugewiesen. Andernfalls weist xsl:otherwise der Variablen defaultmäßig den Wert 100 zu.
Elementdefinition:
XSLT 1.0:
<!-- Category: instruction -->
<xsl:choose>
<!-- Content: (xsl:when+, xsl:otherwise?) -->
</xsl:choose>
XSLT 2.0:
<!-- Category: instruction -->
<xsl:choose>
<!-- Content: (xsl:when+, xsl:otherwise?) -->
</xsl:choose>
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Galileo Press, Rheinwerkallee 4, 53227 Bonn