If you have more question about grouping,
you can find good answers at this site :
http://www.jenitennison.com/xslt/grouping/index.html
It was useful to me, I hope Jeni Tennison's website will useful to you too.
Regards,
Nicolas Fédou
-----Message d'origine-----
De : Andrew Welch [mailto:AWelch(_at_)piper-group(_dot_)com]
Envoyé : jeudi 7 août 2003 15:47
À : xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Objet : RE: [xsl] creating a directory-like index
I wnat to create a directory like index from a list of names. I want
to
have section heading for each existing first-letter, followed by all
names starting with that first letter, omitting
non-existant letters.
Like this:
A
Alexander
Andrea
M
Martin
Max
Moritz
I can see what you were trying to do... what you need to do is use the
Muenchian method of grouping - you find the first occurance of each
group, then apply-templates to its following-siblings (within the
group).
This should be what you need:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="group-by-initial" match="name" use="substring(.,1,1)"/>
<xsl:template match="root">
<div>
<xsl:for-each select="name[generate-id(.) =
generate-id(key('group-by-initial',substring(.,1,1))[1])]">
<div
style="margin-top:1em;text-transform:uppercase"><xsl:value-of
select="substring(.,1,1)"/></div>
<xsl:apply-templates
select=".|following-sibling::name[starts-with(.,substring(curr
ent(),1,1)
)]">
<xsl:sort select="."/>
</xsl:apply-templates>
</xsl:for-each>
</div>
</xsl:template>
<xsl:template match="name">
<div><xsl:apply-templates/></div>
</xsl:template>
</xsl:stylesheet>
cheers
andrew
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list