XML-Know How

Bedingte Verarbeitung und Selektion

Wie auch in anderen Programmiersprachen gibt es in XSLT Elemente, die eine Ablaufsteuerung erlauben, d. h. »wenn-dann«-Bedingungen auswerten. Hierzu dient u. a. das Element <xsl:if>. Es umschließt einen Block, der immer nur dann ausgeführt wird, wenn der XPath-Ausdruck des test-Attributes zutrifft. Auf diese Weise kann z. B. der Inhalt von Elementen abgefragt werden (nicht das Vorhandensein des Elements selbst, das ja bereits über <xsl:template match=...> abgeprüft wird).

<xsl:if test="NAME='Montero'">
    <xsl:value-of select="NAME"/>
    <xsl:text> (Spanier)</xsl:text>
</xsl:if>

Dieses Fragment bewirkt folgende Ausgabe:

Montero (Spanier)

Anders als in den meisten Programmiersprachen ist allerdings die dazugehörige else-Anweisung nicht Teil der XSLT-Spezifikation. Um mehrere Alternativen zu formulieren, verwendet man daher nicht das <xsl:if> Element, sondern greift auf die Elemente <xsl:choose>, <xsl:when> und <xsl:otherwise> zurück. Diese ähneln den aus Java oder C bekannten Anweisungen switch, case und default.

Mit <xsl:choose> wird eine Verzweigung eingeleitet, mit <xsl:when> werden die möglichen Fälle aufgelistet und mit <xsl:otherwise> eine Alternative angegeben, die immer dann ausgeführt wird, wenn keiner der vorher mit when genannten Fälle zutrifft:

<xsl:choose>
    <xsl:when test="NAME='Montero'">
      <xsl:value-of select="NAME"/>
      <xsl:text> (Spanier) </xsl:text>
    </xsl:when>

    <xsl:when test="NAME='Ott'">
      <xsl:value-of select="NAME"/>
      <xsl:text> (Deutscher) </xsl:text>
    </xsl:when>

    <xsl:otherwise>
      <xsl:value-of select="NAME"/>
      <xsl:text> (Nationalität unbekannt) </xsl:text>
    </xsl:otherwise>
 </xsl:choose>