RE: [xsl] alternate row color in a table

Subject: RE: [xsl] alternate row color in a table
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 10 Mar 2005 23:25:53 -0000
No, if you are processing a sorted sequence, then position() gives you the
position of the item in the sorted sequence, not its position before
sorting.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Jason Tripanier [mailto:jtrepanier@xxxxxxxxxxx]
> Sent: 10 March 2005 20:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] alternate row color in a table
>
> How can a real "alternate row color in XSLT" be done??
> I'll outline the problems with examples below, but I am hoping
> someone will offer a solution to this problem.
>
>
> The problem with using position() to alternate rows; is that
> if you are
> doing a query
> on the data, you are not getting the data order. Selectively
> choosing data
> will mess up
> the row colors because there are missing positions.
>
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>
>
> <xsl:param name="keyword">none</xsl:param>
>
> <xsl:template match="/">
>      <xsl:for-each select="//books">
>      <xsl:sort order="ascending" select="title"/>
>      <xsl:if test="title/*= $keyword">
>      <table width="100%"  border="0" cellspacing="0" cellpadding="0">
> 	<tr class="myBkgnd_{position()  mod 2}">
>
>          <td width="*" class="pad">
>              <xsl:value-of select="title" />
>          </td>
>      </tr>
>      </table>
>      </xsl:if>
>      </xsl:for-each>
> </xsl:template>
>
> if you pass this a keyword, it will display the results,
> however, seeing
> as how the results are not in sequential order, the
> position() does not work
> as one may wish. You will end up with several <tr>'s that are
> style1 and
> several <tr>'s that are style2 (in whatever order).
>
> so lets take an example
>
> say you have an xml file with this
>
> <books>
> 	<title>Book A</title>
> 	<title>Pamphlet 1</title>
> 	<title>Book B</title>
> 	<title>Book C</title>
> 	<title>Pamphlet 2</title>
> </books>
>
> and your keyword is "Book", the results will show
>
> Book A (with style1) - actual position value = 1
> Book B (with style1) - actual position value = 3
> Book C (with style2) - actual position value = 4

Current Thread