RE: "sorted" axis (was: Remove duplicates from a node-set accordi ng to content)

Subject: RE: "sorted" axis (was: Remove duplicates from a node-set accordi ng to content)
From: Kay Michael <Michael.Kay@xxxxxxx>
Date: Mon, 2 Aug 1999 16:25:04 +0100
> 
> > something like:
> > 
> > process node set X sorted by Y then Z
> > -- for each group with common Y do
> > -- <h2>Y</h2>
> > ---- for each group with common Z do
> > ---- <h3>Z</h3><ul>
> > ------- for each item do
> > ------- <li>stuff</li>
> > ------- end for
> > ---- </ul>
> > ---- end for
> > ---<hr/>
> > -- end for
> > end process
> 
> Couldn't you think of it as?
> 
> for each member of (node set X sorted by Y then Z, grouped by 
> Y then by
> Z)
> -- <h2>Y</h2>
> ---- for each member of the current group do
> ---- <h3>Z</h3><ul>
> ------- for each member of the current group do
> ------- <li>stuff</li>
> ------- end for
> ---- </ul>
> ---- end for
> ---<hr/>
> -- end for
> end for
> 
You could think of it that way, but I'm not sure I see the benefit in
"factoring out" the group definitions to the top.

Another way of doing it, which solves the counting/totalling problem, avoids
the need for xsl:item, and allows use of apply-templates, is to assign a
node-set variable to each group in turn:

<xsl:for-each-group name="annual-sales" select="$all-sales"
group-by="@year">
   <xsl:sort select="@year"/>
   <h1>Sales in <xsl:value-of select="@year"/></h1>
   <xsl:for-each-group name="monthly-sales" select="$annual-sales"
group-by="@month">
      <xsl:sort select="@month"/>
      <h2>Sales in <xsl:value-of select="month-name(@month)"/></h2>
      <xsl:for-each select="$monthly-sales">
		<p><xsl:value-of select="concat(@customer, ': ',
@sales-value)"/></p>
      </xsl:for-each>
      <p>Total sales for the month:
		 <xsl:value-of
select="sum($monthly-sales/@sales-value)"/></p>
   </xsl:for-each-group>
   <p>Total sales for the year:
		 <xsl:value-of
select="sum($annual-sales/@sales-value)"/></p>
</xsl:for-each-group>


Mike K


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


Current Thread