[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Alternating row background color - a twist
Hey Hardy, Why not use the same math logic against the district_id? Such like: <xsl:if test="district_id mod 2 = 0"> ...do this? </xs:if> The following code might make your recursive problem a bit easier to manage as well using apply-templates instead of for-each to put the code into seperate templates that can easily be managed and modified "outside" of the code-base it will subsequently become back together with in the output: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="legislators"/> </xsl:template> <xsl:template match="legislators"> <table> <xsl:apply-templates select="legislator"/> </table> </xsl:template> <xsl:template match="legislator"> <xsl:variable name="did"> <xsl:choose> <xsl:when test="district_id mod 2 = 0"> <xsl:text>#fff</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>#ccc</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:variable> <tr style="background:{$did}"> <td> <xsl:value-of select="name"/> </td> </tr> </xsl:template> </xsl:stylesheet> Hope this helps! Cheers! <M:D/> On Tue, 28 Dec 2004 09:13:06 -0500, Hardy Merrill <HMerrill@xxxxxxxxxxxxxxxx> wrote: > The typical way of alternating the background color of every other row > in an HTML table is something like this: > > <xsl:for-each select="msxsl:node-set($sorted_legislators)"> > <tr> > <xsl:if test="position() mod 2 = 0"> > <xsl:attribute > name="bgcolor">#eeeeee</xsl:attribute> > </xsl:if> > > ------------------------------------ > > My situation is this - the for-each is based on legislators sorted by > district - here's a sample (not real) xml to illustrate: > > <legislators> > <legislator> > <name>Joe</name> > <district_id>1</district_id> > </legislator> > <legislator> > <name>Bob</name> > <district_id>2</district_id> > </legislator> > <legislator> > <name>Pete</name> > <district_id>2</district_id> > </legislator> > </legislators> > > There will be one *or more* legislators for each district. Instead of > alternating the background color for every *legislator*, I want to > alternate the background color for every *district*. In other words, I > want Joe in district_id 1 to have white background, but I want both Bob > and Pete in district_id 2 to have a gray background. But since I can't > change the value of a variable (can't increment a counter), I don't know > what I can base the bgcolor alternation on. > > The xsl:for-each is based on a select of a variable containing all > legislators sorted by district. > > I know there is probably an easy way to do this, but I don't know it. > Help! > > Thanks. > > Hardy Merrill > > -- :: M. David Peterson :: XML & XML Transformations, C#, .NET, and Functional Languages Specialist
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|