The <xsl:choose> Element

The <xsl:choose> element is logically equivalent to an if-then-else statement, although it has the feel of a case or switch statement in other programming languages. An <xsl:choose> contains at least one <xsl:when> element (logically equivalent to an <xsl:if> element), with an optional <xsl:otherwise> element (logically equivalent to an else in other programming languages). The test attribute of each <xsl:when> element is evaluated until the XSLT processor finds one that evaluates to true. When that happens, the contents of that <xsl:when> element are evaluated. (Unlike a case or switch element, each <xsl:when> is a separate test.) If none of the <xsl:when> elements have a test that is true, the contents of the <xsl:otherwise> element (if there is one) are processed.

<xsl:choose> example

Here’s a sample <xsl:choose> element that sets the background color of the table’s rows. If the bgcolor attribute is coded on the <table-row> element, the value of that attribute is used as the color; otherwise, the sample uses the position() function and the mod operator to cycle the colors between black, green, red, and blue:

<xsl:template match="table-row"> <tr> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="@bgcolor"> <xsl:value-of select="@bgcolor"/> </xsl:when> <xsl:when test="position() mod 4 = 0"> <xsl:text>black</xsl:text> </xsl:when> <xsl:when test="position() mod 4 = 1"> <xsl:text>green</xsl:text> </xsl:when> <xsl:when test="position() mod 4 = 2"> <xsl:text>red</xsl:text> ...

Get XSLT, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.