|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Comparing and re-assigning variables.
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
|
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
|

Cart








