[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Alternating row background color - a twist

Subject: Re: Alternating row background color - a twist
From: "M. David Peterson" <m.david.x2x2x@xxxxxxxxx>
Date: Tue, 28 Dec 2004 07:31:41 -0700
xsl alternating
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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.