xsl:otherwise
(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 Sub-Instruktion xsl:otherwise bezeichnet den innerhalb eines xsl:choose-Elements alternativ zu den enthaltenen xsl:when-Instruktionen auszuführenden Templateblock. Dieser wird instanziiert, wenn alle test-Attribute der vorangegangenen xsl:when-Instruktionen false sind, entspricht also dem Default-Zweig einer Switch- bzw. Select-Case-Anweisung.
Klassifizierung | Sub-Instruktion |
Funktionsgruppe | Bedingte Verarbeitung |
Einführung | XSLT 1.0 |
Position im Stylesheet und erlaubte Inhalte:
xsl:otherwise tritt in Form einer Sub-Instruktion als optionales, abschließendes Child-Element von xsl:choose nach dort vorhandenen xsl:when-Sub-Instruktionen auf. Es darf pro xsl:choose-Container nur maximal ein xsl:otherwise-Element verwendet werden. Erlaubter Inhalt ist ein Templatebody in Form eines Sequenzkonstruktors, der aus Text, Literal Result Elements und beliebigen XSLT-Instruktionen bestehen darf.
Attribute:
Es gelten die Standardattribute. Darüber hinaus besitzt xsl:otherwise keine elementspezifischen Attribute.
Verwendungszweck:
Die Anweisung xsl:otherwise steht als optionale abschließende XSLT-Instruktion innerhalb eines xsl:choose-Elements. Der in xsl:otherwise enthaltene Templateblock wird dann und nur dann ausgeführt, wenn keine der im xsl:choose-Block vorangehenden xsl:when-Bedingungen erfüllt ist. Die Instruktion xsl:otherwise benötigt keine eigene Bedingung, da sie in »allen anderen Fällen« auszuführen ist.
Die Instruktion kann funktional stellvertretend für die in XSLT nicht existierende »xsl:else«-Instruktion gesehen werden (siehe Beispiel 1). Die IF-ELSE-Bedingung muss in diesem Fall durch den umgreifenden Container xsl:choose gebildet werden, die anstelle des IF genau eine xsl:when-Bedingung und anstelle des ELSE eine xsl:otherwise-Instruktion enthält. (Eine Verwendung von xsl:otherwise in Verbindung mit xsl:if ist dagegen nicht möglich!)
Enthält der xsl:choose-Container mehrere xsl:when-Instruktionen, so entspricht das Gesamtkonstrukt eher einer Select-Case-Anweisung mit der xsl:otherwise-Instruktion als Default-Zweig (Beispiel 2).
Es ist üblich, dass im Anschluss an die erste erfüllte xsl:when-Bedingung das xsl:choose-Element verlassen wird (die XSLT 2.0-Spezifikation legt sich hier, entgegen früheren Versionen, explizit fest) – eine Break-Anweisung, wie in manchen Programmiersprachen erforderlich, ist in XSLT nicht nötig. Es werden auch nie mehrere xsl:when-Blöcke ausgeführt, selbst wenn anhand erfüllter Bedingungen plausibel wäre – mehr darüber bei den Erläuterungen zu xsl:when.
Der xsl:otherwise-Block steht notwendigerweise am Ende der Kette und wird also nur dann instantiiert, wenn keine der vorangegangenen xsl:when-Bedingungen erfüllt ist.
Beispiele:
Beispiel 1 – xsl:otherwise als »else«-Zweig:
<xsl:choose>
<xsl:when test="$bedingung">
<!-- if-Zweig -->
</xsl:when>
<xsl:otherwise>
<!-- else-Zweig -->
</xsl:otherwise>
</xsl:choose>
Ist die test-Bedingung von xsl:when nicht erfüllt ($bedingung ist false), so tritt der xsl:otherwise-Block in Kraft.
Beispiel 2 – xsl:otherwise als »Select-Default«:
<xsl:choose>
<xsl:when test="$bedingung1">
<!-- Case bedingung1 -->
</xsl:when>
<xsl:when test="$bedingung2">
<!-- Case bedingung2 -->
</xsl:when>
<xsl:when test="$bedingung3">
<!-- Case bedingung3 -->
</xsl:when>
<xsl:otherwise>
<!-- Case default -->
</xsl:otherwise>
</xsl:choose>
Als letztes Glied einer xsl:when-Kette verhält sich xsl:otherwise wie der Default-Zweig einer »Select-Case«-Kontrollstruktur.
Elementdefinition:
XSLT 1.0:
<!-- Category: sub-instruction -->
<xsl:otherwise>
<!-- Content: template -->
</xsl:otherwise>
XSLT 2.0:
<!-- Category: sub-instruction -->
<xsl:otherwise>
<!-- Content: sequence-constructor -->
</xsl:otherwise>
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