xsl-list
[Top] [All Lists]

RE: creating a directory-like index

2003-08-07 07:47:20


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(current(),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



<Prev in Thread] Current Thread [Next in Thread>