XML-Know How

Bedingte Verarbeitung und Selektion

xsl:if

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 Abschnitt des Templates, der immer nur dann ausgeführt wird, wenn der XPath-Ausdruck des test-Attributes zutrifft. Auf diese Weise können z. B. sehr einfach Attribut-Auswertungen vorgenommen werden:

Beispiel:

<xsl:template match="rezept">

<xsl:if test="@typ='vegetarisch'">

<p>Dieses Rezept ist für die fleischlose Ernährung geeignet.</p>

</xsl:if>

<p>

<xsl:apply-templates/>

</p>

</xsl:template>

xsl:choose

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 das Element <xsl:choose> mit den Kindelementen <xsl:when> und <xsl:otherwise> zurück.

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:

Beispiel:

<xsl:template match="rezept">

<xsl:choose>

<xsl:when test="@kategorie='hauptgericht'">

<img src="icon_hauptgericht.jpg"/>

</xsl:when>

<xsl:when test="@kategorie='vorspeise'">

<img src="icon_vorspeise.jpg"/>

</xsl:when>

<xsl:otherwise>

<p>Dieses Rezept ist keiner Kategorie zugeordnet.</p>

</xsl:otherwise>

</xsl:choose>

<p>

<xsl:apply-templates/>

</p>

</xsl:template>

Dieses Template würde dazu führen, dass jedem Rezept ein passendes Icon als Grafik vorangestellt wird – abhängig davon, ob es in die Kategorie »Vorspeise« oder »Hauptgericht« fällt. Bei allen anderen Kategorien greift die <xsl:otherwise>-Regel.