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 ausge­führt, wenn keine der im xsl:choose-Block vorangehenden xsl:when-Bedin­gungen 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 Gesamtkon­strukt 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