David,
While Hugh's answer might work, the method used in his first for-each select is 
kind of an odd way of doing Muenchian grouping in XSLT 1.0. Here's the approach 
with the standard method:
<xsl:key name="authorgroup" match="book" use="@author" />
<xsl:template match="/doc">
        <report>
                <xsl:for-each select="book[generate-id() = 
generate-id(key('authorgroup', @author))]">
                        <author name="{(_at_)author}">
                                <xsl:for-each select="key('authorgroup', 
@author)">
                                        <title><xsl:value-of select="@title" 
/></title>
                                </xsl:for-each>
                        </author>
                </xsl:for-each>
        </report>
</xsl:template>
Someone else might be able to elaborate more about the performance differences 
of using generate-id() vs. count(), but generate-id() is the more widely used 
approach.
~ Scott
-----Original Message-----
From: David Frey [mailto:dpfrey(_at_)shaw(_dot_)ca] 
Sent: Thursday, September 23, 2010 8:51 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Question about grouping
I have an XSLT problem that I haven't been able to figure out.  The example 
below is essentially the simplest version of the problem I have encountered.
Say you have a document like this:
<doc>
  <book title="aaa" author="jones"/>
  <book title="bbb" author="smith"/>
  <book title="ccc" author="douglas"/>
  <book title="ddd" author="jones"/>
  <book title="eee" author="jones"/>
  <book title="fff" author="douglas"/>
  <book title="ggg" author="smith"/>
</doc>
How can you produce a document like this?:
<report>
  <author name="jones">
        <title>aaa</title>
        <title>ddd</title>
        <title>eee</title>
  </author>
  <author name="smith">
        <title>bbb</title>
        <title>ggg</title>
  </author>
  <author name="douglas">
        <title>bbb</title>
        <title>fff</title>
  </author>
</report>
Restrictions:
- Only XSLT 1.0
- You can't hard-code the names of the books or the authors in the XSLT.
Thanks,
Dave
--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--