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.