xsl-list
[Top] [All Lists]

RE: Different Colors for Alternating Rows

2003-06-27 12:21:37
Americo,

Your solution was the most promising so far. The time to execute was less than 
half of what I had before, but unfortunately that is still long (now it's about 
3 minutes, compared to 7.5 minutes).

The solutions that looked like they held promise from a performance point of 
view, but which didn't seem to work due to array index out of bound errors were 
the ones that recursively re-applied the template match for 
select="following-sibling:tr[1]." (I wonder if somehow it's faster to get the 
following-sibling than the previous sibling.)

Thanks very much,
Rechell Schwartz

-----Original Message-----
From: Américo Albuquerque [mailto:melinor(_at_)sapo(_dot_)pt] 
Sent: Friday, June 27, 2003 11:48 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Different Colors for Alternating Rows

Hi

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Schwartz, Rechell R, ALABS
Sent: Thursday, June 26, 2003 4:08 PM
To: Schwartz, Rechell R, ALABS; 
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Different Colors for Alternating Rows


Before I throw in the towel on this one, I tried my own 
approach, which I thought should work, but didn't. Any 
insights would be appreciated. 

Try this, it worked with the example provided

  <xsl:template match="node()|@*">
    <!--identity transform-->
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="table">
    <xsl:copy>
      <xsl:apply-templates mode="oddeven" select="tr[td[not(a or
@class)]]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="tr" mode="oddeven">
    <xsl:variable name="pos" select="position() mod 2"/>
    <!-- the non selected nodes are precessed by the identity template and
are selected here. -->
    <xsl:apply-templates select="preceding-sibling::tr[td[a or
@class]][generate-id(following-sibling::tr[td[not(a or
@class)]])=generate-id(current())]"/>
    <xsl:copy>
      <!-- you could use xsl:choose if you want, I use a boolean test to set
the correct mode -->
      <xsl:apply-templates mode="odd" select="node()[$pos=1]"/>
      <xsl:apply-templates mode="even" select="node()[$pos=0]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="td" mode="odd">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:attribute name="class">oddMedium</xsl:attribute>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="td" mode="even">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:attribute name="class">evenMedium</xsl:attribute>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>


Hope this helps you
(...)



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>