René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

XSL: Using when .. otherswise to color every other row differently

The XML File:
<?xml version="1.0"?>

<items>
   <item>
     <a>one</a>
     <b>two</b>
     <c>three</c>
   </item>

   <item>
     <a>eins</a>
     <b>zwei</b>
     <c>drei</c>
   </item>

   <item>
     <a>apple</a>
     <b>pear</b>
     <c>banana</c>
   </item>

   <item>
     <a>anna</a>
     <b>bob</b>
     <c>claude</c>
   </item>

   <item>
     <a>large</a>
     <b>small</b>
     <c>medium</c>
   </item>

   <item>
     <a>here</a>
     <b>there</b>
     <c>everywhere</c>
   </item>

</items>
The XSL File:
<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:db="http://ananas.org/2002/docbook/subset">

  <xsl:template match="/">
    <html><head><title>alternating rows</title></head><body>
      <xsl:apply-templates/>
    </body></html>
  </xsl:template>

  <xsl:template match="items">
    <table>
      <xsl:apply-templates/>
    </table>
  </xsl:template>

  <xsl:template match="item">
    <xsl:choose>
      <xsl:when test="position() mod 2 = 0">
        <xsl:text disable-output-escaping="yes">
        &lt;tr style='background-color="#cceeee"'&gt;
        </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text disable-output-escaping="yes">
        &lt;tr style='background-color="#eeffcc"'&gt;
        </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    
    <td><xsl:value-of select="a"/></td>
    <td><xsl:value-of select="b"/></td>
    <td><xsl:value-of select="c"/></td>

    <xsl:text disable-output-escaping="yes">
      &lt;/tr&gt;
    </xsl:text>

  </xsl:template>

</xsl:stylesheet>
The Output (whitespaces manually modified):
<html>
  <head>   
     <META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>alternating rows</title></head>
   <body>
     <table>
        <tr style='background-color="#eeffcc'>
        <td>one</td><td>two</td><td>three</td>
      </tr>
      <tr style='background-color="#ffffee'>
        <td>eins</td><td>zwei</td><td>drei</td>
      </tr>
      <tr style='background-color="#eeffcc'>
        <td>apple</td><td>pear</td><td>banana</td>
      </tr>
      <tr style='background-color="#ffffee'>
        <td>anna</td><td>bob</td><td>claude</td>
      </tr>
      <tr style='background-color="#eeffcc'>
        <td>large</td><td>small</td><td>medium</td>
      </tr>
      <tr style='background-color="#ffffee'>
        <td>here</td><td>there</td><td>everywhere</td>
      </tr>
    </table>
  </body>
</html>