Subject: RE: 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: 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
|