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-Anweisungs­blocks 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:other­wise-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-Bedin­gung entspricht in der Wirkung exakt einer xsl:if-Anweisung. Im Gegen­satz zu jener ist eine mit xsl:choose angelegte Bedingung jedoch ausbaubar und entspricht somit im Grunde einer IF-ELSE-IF- oder einer SWITCH-Kon­struktion, 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ür­zel. 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