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 |