xsl:when

(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:when enthält einen bedingten Templateblock, der nur dann ausgeführt (instanziiert) wird, wenn die mittels des Attributs test formulierte Bedingung erfüllt ist. Mittels mehrerer, in die Instruktion xsl:choose eingefügten xsl:when-Bedingungen kann zwischen mehreren alternativen Templateblöcken gewählt werden.

Klassifizierung Sub-Instruktion
Funktionsgruppe Bedingte Verarbeitung
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

xsl:when tritt als Sub-Instruktion ausschließlich als unmittelbares Child-Element der Instruktion xsl:choose auf. Die Sub-Instruktion enthält einen Templateblock in Form eines Sequenzkonstruktors, der instanziiert wird, wenn die Bedingung des test-Attributs erfüllt ist.

Attribute:

Es gelten die Standardattribute. Darüberhinaus besitzt die Instruktion xsl:when ein obligatorisches Attribut test.

test

Wert

xpath-expression

Verwendung

obligatorisch

Einführung

XSLT 1.0

Das test-Attribut enthält einen XPath-Ausdruck, dessen Auswertung einen booleschen Wert ergibt oder in einen booleschen Wert umgewandelt werden kann. Ist das Ergebnis des Ausdrucks false, so gilt die Bedingung als nicht erfüllt und der Templateblock im Inneren des xsl:when-Elements wird übersprungen. Ist das Ergebnis der Auswertung true, so gilt die Bedingung als erfüllt und der Templateblock wird instanziiert.

Verwendungszweck:

Die Anweisung xsl:when dient im Rahmen einer sie umschließenden xsl:choose-Instruktion zur Konstruktion einer Abfolge bedingter Tem­plateblöcke analog zu einem switch-Statement, wie es in ver­schiedenen Programmiersprachen üblich ist. Eine xsl:when-Instruktion mit Templateblock entspricht einem CASE einer SELECT-Gruppe.

Die Analogie lässt sich insoweit fortsetzen, als lediglich diejenige xsl:when-Instruktion einer Gruppe ausgeführt wird, deren test-Attribut als erstes in der Reihe erfüllt wird. Nach Instanziierung ihres Templateblocks wird das xsl:choose-Element verlassen, die auf die ausgeführte folgenden xsl:when-Instruktionen werden also nicht mehr berücksichtigt. Dies ist auch dann der Fall, wenn die test-Attribute einer oder mehrerer dieser folgenden Instruktio­nen ebenfalls erfüllt wären.

Erst wenn keine der test-Bedingungen der in xsl:choose enthaltenen xsl:when-Instruktionen erfüllt ist, tritt die xsl:otherwise-Instruktion in Kraft – sofern eine solche vorhanden ist. Ist dies der Fall, so wird ihr Templateblock instanziiert. Dies entspricht dem Default-Zweig einer Select-Anweisung. Andernfalls wird das xsl:choose-Element verlassen, ohne dass einer der ent­haltenen Templateblöcke in Kraft tritt.

Eine einzelne xsl:when-Instruktion innerhalb von xsl:choose ist das genaue Äquivalent zu einer xsl:if-Anweisung. Bei der Verwendung der komplizierte­ren Version mit der Kombination xsl:choose und xsl:when gibt es allerdings im Gegensatz zu xsl:if die Möglichkeit einer Erweiterung durch ein xsl:otherwise, was dem ELSE-Zweig einer IF-Bedingung entspräche.

Hinweis – Alternative XPath-Konstrukte in XPath 2.0:
In XPath 2.0 ist der Einsatz von if ... then ... else-Konstruktionen innerhalb eines XPath-Ausdrucks möglich, was die Verwendung von xsl:choose in bestimmten Fällen obsolet machen kann. Dies geschieht aller­dings zum Preis fehlender Abwärtskompatibilität zu XSLT 1.0/XPath 1.0

Beispiel – Positionsabhängige Zuweisung englischer Ordnungszahl­suffixe:

...
<xsl:value-of select="position()"/>
<xsl:choose>
  <xsl:when test="position()=1">st</xsl:when>
  <xsl:when test="position()=2">nd</xsl:when>
  <xsl:when test="position()=3">rd</xsl:when>
  <xsl:otherwise>th</xsl:otherwise>
</xsl:choose>
...

Ausgegeben wird je nach Wert von position() 1st, 2nd, 3rd, 4th etc.

Elementdefinition:

XSLT 1.0:

<!-- Category: instruction -->
<xsl:when 
     test = boolean-expression>

     <!-- Content: template -->
</xsl:when>

XSLT 2.0:

<!-- Category: instruction -->
<xsl:when
     test = expression>

     <!-- Content: sequence-constructor -->
</xsl:when>
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