Subject: RE: [xsl] for-each and summing based on group From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 5 Jan 2005 19:31:51 -0000 |
If you want maximum compatibility when running a 1.0 stylesheet under a 2.0 processor, leave the code completely unchanged - i.e. leave version="1.0". If you change it to say version="2.0" then you get more rigorous type-checking: this won't allow implicit type conversions such as comparing a string to an integer. In this example you have to change the code to make it clear whether you want the integer converted to a string or vice-versa. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: dmitrik@xxxxxxxxxxxxxx [mailto:dmitrik@xxxxxxxxxxxxxx] > Sent: 05 January 2005 19:12 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] for-each and summing based on group > > during a quick online search didn't see any example: > > does 1.0 just change to 2.0 in the following? > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > > > > -----Original Message----- > From: Michael Kay <mike@xxxxxxxxxxxx> > Sent: Jan 5, 2005 1:26 PM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] for-each and summing based on group > > > When changing the xsl from 1.0 to 2.0 there > > were errors. > > Is it simpler to do that, or use Muenchian grouping for the > Customer? > > If you were saying that a stylesheet that worked under 1.0 > didn't work under > a 2.0 processor, then this is unusual and it would be nice to know the > details. > > Michael Kay > http://www.saxonica.com/ > > > > > > > <xsl:for-each select="Trade"> > > > > <xsl:sort select="Customer"/> > > > > <tr class="r{position() mod 2}"> > > > > <td><xsl:value-of select="Customer"/> </td> > > > > <td><xsl:value-of select="TradeId"/><xsl:text/></td> > > > > <td><xsl:value-of select="Type"/><xsl:text/></td> > > > > <td align="right"> > > <xsl:value-of select="format-number(sum(Step > > > > [concat(substring(MinFlowDate,7),substring(MinFlowDate,1,2),su > > bstring(MinFlowDate,4,2))>= > > concat(substring($global,7),substring($global,1,2),substring($ > > global,4,2))] > > > > [concat(substring(MinFlowDate,7),substring(MinFlowDate,1,2),su > > bstring(MinFlowDate,4,2))< > > concat(substring($global,7)+3,substring($global,1,2),substring > > ($global,4,2))] > > /StepCharge)+ sum(Step > > > > [concat(substring(MinFlowDate,7),substring(MinFlowDate,1,2),su > > bstring(MinFlowDate,4,2))>= > > concat(substring($global,7),substring($global,1,2),substring($ > > global,4,2))] > > > > [concat(substring(MinFlowDate,7),substring(MinFlowDate,1,2),su > > bstring(MinFlowDate,4,2))< > > concat(substring($global,7)+3,substring($global,1,2),substring > > ($global,4,2))] > > /StepSetoff) , '###,###,##0')"/> > > </td> > > > > </xsl:for-each> > > > > Thanks, > > Dmitri > > > > -----Original Message----- > > From: Michael Kay <mike@xxxxxxxxxxxx> > > Sent: Jan 5, 2005 4:50 AM > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: RE: [xsl] for-each and summing based on group > > > > First read up about standard grouping techniques such as > > Muenchian grouping > > at http://www.jenitennison.com/xslt/grouping > > > > Computing a subtotal for each group is then a minor variant of the > > technique: instead of merely iterating over the items in the > > group using > > xsl:for-each, you can assign the node-set comprising the group to a > > variable, and then sum over that using the sum() function. > > > > Like all grouping problems, it's much easier in 2.0: > > > > <xsl:for-each-group select="rows" group-by="columnA"> > > <xsl:apply-templates select="current-group()"/> > > <subtotal><xsl:value-of > > select="sum(current-group()/columnB)"/></subtotal> > > </xsl:for-each-group> > > > > Michael Kay > > http://www.saxonica.com/ > > > > > -----Original Message----- > > > From: dsk [mailto:dmitrik@xxxxxxxxxxxxxx] > > > Sent: 05 January 2005 04:09 > > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > Subject: [xsl] for-each and summing based on group > > > > > > > > > within a for-each there might be various sets of values which > > > produce the > > > following grid, where val is equal to a number > > > > > > a val val val > > > a val val val > > > a val val val > > > b val val val > > > b val val val > > > c val val val > > > c val val val > > > > > > what is the best way to insert a sum line for the first > > > column a, one for b, and one for c. > > > > > > is a nested for each needed? or checking to see if the > > > following value is > > > not equal to the preceding, then then summing? > > > > > > thanks, > > > Dmitri > > > > > > --- > > > Outgoing mail is certified Virus Free. > > > Checked by AVG anti-virus system (http://www.grisoft.com). > > > Version: 6.0.802 / Virus Database: 545 - Release Date: 11/26/2004
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] for-each and summing base, dmitrik | Thread | RE: [xsl] for-each and summing base, dmitrik |
RE: [xsl] for-each and summing base, dmitrik | Date | RE: [xsl] Non-xml source documents, Jim Neff |
Month |