XSLT <xsl:choose> Element

From http://www.w3schools.com (Copyright Refsnes Data)

# XSLT <xsl:choose> Element

The <xsl:choose> element is used in conjunction with <xsl:when> and <xsl:otherwise> to express multiple conditional tests.

## The <xsl:choose> Element

### Syntax

    <xsl:choose>
      <xsl:when test="expression">
        ... some output ...
      </xsl:when>
      <xsl:otherwise>
        ... some output ....
      </xsl:otherwise>
    </xsl:choose>

## Where to put the Choose Condition

To insert a multiple conditional test against the XML file, add the <xsl:choose>, <xsl:when>, and <xsl:otherwise> elements to the XSL file:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
      <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
          	<xsl:choose>
              <xsl:when test="price &gt; 10">
                <td bgcolor="#ff00ff">
                <xsl:value-of select="artist"/></td>
              </xsl:when>
              <xsl:otherwise>
                <td><xsl:value-of select="artist"/></td>
              </xsl:otherwise>
            </xsl:choose>
          </tr>
          </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>

    </xsl:stylesheet>

The code above will add a pink background-color to the "Artist" column WHEN the price of the CD is higher than 10.

The result of the transformation will look like this:

## My CD Collection

Title | Artist
--- | ---
Empire Burlesque | Bob Dylan
Hide your heart | Bonnie Tyler
Greatest Hits | Dolly Parton
Still got the blues | Gary Moore
Eros | Eros Ramazzotti
One night only | Bee Gees
Sylvias Mother | Dr.Hook
Maggie May | Rod Stewart
Romanza | Andrea Bocelli
When a man loves a woman | Percy Sledge
Black angel | Savage Rose
1999 Grammy Nominees | Many
For the good times | Kenny Rogers
Big Willie style | Will Smith
Tupelo Honey | Van Morrison
Soulsville | Jorn Hoel
The very best of | Cat Stevens
Stop | Sam Brown
Bridge of Spies | T`Pau
Private Dancer | Tina Turner
Midt om natten | Kim Larsen
Pavarotti Gala Concert | Luciano Pavarotti
The dock of the bay | Otis Redding
Picture book | Simply Red
Red | The Communards
Unchain my heart | Joe Cocker

View the XML file, View the XSL file, and View the result

## Another Example

Here is another example that contains two <xsl:when> elements:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
      <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
          	<xsl:choose>
              <xsl:when test="price &gt; 10">
                <td bgcolor="#ff00ff">
                <xsl:value-of select="artist"/></td>
              </xsl:when>
              <xsl:when test="price &gt; 9">
                <td bgcolor="#cccccc">
                <xsl:value-of select="artist"/></td>
              </xsl:when>
              <xsl:otherwise>
                <td><xsl:value-of select="artist"/></td>
              </xsl:otherwise>
            </xsl:choose>
          </tr>
          </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>

    </xsl:stylesheet>

The code above will add a pink background color to the "Artist" column WHEN the price of the CD is higher than 10, and a grey background-color WHEN the price of the CD is higher than 9 and lower or equal to 10.

The result of the transformation will look like this:

## My CD Collection

Title | Artist
--- | ---
Empire Burlesque | Bob Dylan
Hide your heart | Bonnie Tyler
Greatest Hits | Dolly Parton
Still got the blues | Gary Moore
Eros | Eros Ramazzotti
One night only | Bee Gees
Sylvias Mother | Dr.Hook
Maggie May | Rod Stewart
Romanza | Andrea Bocelli
When a man loves a woman | Percy Sledge
Black angel | Savage Rose
1999 Grammy Nominees | Many
For the good times | Kenny Rogers
Big Willie style | Will Smith
Tupelo Honey | Van Morrison
Soulsville | Jorn Hoel
The very best of | Cat Stevens
Stop | Sam Brown
Bridge of Spies | T`Pau
Private Dancer | Tina Turner
Midt om natten | Kim Larsen
Pavarotti Gala Concert | Luciano Pavarotti
The dock of the bay | Otis Redding
Picture book | Simply Red
Red | The Communards
Unchain my heart | Joe Cocker

View the XML file, View the XSL file, and View the result

From http://www.w3schools.com (Copyright Refsnes Data)