|
Subject: RE: [xsl] Comparing and re-assigning variables. From: Jarno.Elovirta@xxxxxxxxx Date: Mon, 24 Feb 2003 16:35:31 +0200 |
Hi,
> Ok, here's a part of a xsl file i wrote to create a
> transactions report:
>
> <!-- Iterate over all txns. -->
> <table border="0">
> <xsl:for-each select="report-root/txns">
> <xsl:sort select="cpmBI"/>
> <xsl:sort select="date"/>
> <xsl:variable name="currCpmBI" select="cpmMemBI"/>
>
> <!-- CODE TO BE INSERTED HERE - READ ON -->
>
> </xsl:for-each>
> </table>
>
> What i want is to compare the value of currCpmBI with the
> previous value in the iteration (which i have not defined in
> the above code). If they differ I want to add a some extra html.
> My question now boils down to:
> - How can i remember the previous value of cpmMemBI and how
> would I store it so i can compare it with the current value
> in the iteration?
> - If the current value has changed, how can i re-initialise
> the previous value with the current value?
Would this work for you - I think there's a name for this sort of generate-sorted-id-list-and-process-that-instead-of-two-passes-or-node-set-extension method, but don't remember what? If it's a silly suggestion, I still blame it being Monday.
<xsl:variable name="delim" select="' '" />
<xsl:key name="id" match="txns" use="generate-id()" />
<xsl:template match="/">
<xsl:variable name="ids">
<xsl:for-each select="report-root/txns">
<xsl:sort select="cpmBI"/>
<xsl:sort select="date"/>
<xsl:if test="not(position() = 1)">
<xsl:value-of select="$delim" />
</xsl:if>
<xsl:value-of select="generate-id(.)" />
</xsl:for-each>
</xsl:variable>
<table border="0">
<xsl:call-template name="recurse">
<xsl:with-param name="ids" select="$ids" />
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="recurse">
<xsl:param name="ids" />
<xsl:param name="previous-cpmMemBI" select="cpmMemBI"/>
<xsl:choose>
<xsl:when test="contains($ids, $delim)">
<xsl:variable name="id" select="substring-before($ids, $delim)" />
<xsl:for-each select="key('id', $id)">
<tr>
<xsl:if test="not(cpmMemBI = $previous-cpmMemBI)">
<xsl:attribute name="class">change</xsl:attribute>
</xsl:if>
<td>
<xsl:value-of select="cpmMemBI" />
</td>
<td>
<xsl:value-of select="cpmBI" />
</td>
<td>
<xsl:value-of select="date" />
</td>
</tr>
<xsl:call-template name="recurse">
<xsl:with-param name="ids" select="substring-after($ids, $delim)" />
<xsl:with-param name="previous-cpmMemBI" select="cpmMemBI" />
</xsl:call-template>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="key('id', $ids)">
<tr>
<td>
<xsl:value-of select="cpmMemBI" />
</td>
<td>
<xsl:value-of select="cpmBI" />
</td>
<td>
<xsl:value-of select="date" />
</td>
</tr>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Cheers,
Jarno - New Order: Blue Monday
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Comparing and re-assignin, Mike Brown | Thread | [xsl] Adding namespaces with copy-o, Cams Ismael |
| [xsl] Re: Can one _generate_ namesp, Joseph Kesselman | Date | Re: [xsl] Comparing and re-assignin, G. Ken Holman |
| Month |