This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Sorting Question: Muenchian method? Substring in Key?
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Fri, 27 Sep 2002 10:40:52 -0700 (PDT)
- Subject: [xsl] Re: Sorting Question: Muenchian method? Substring in Key?
- Reply-to: xsl-list at lists dot mulberrytech dot com
--- Dimitre Novatchev <dnovatchev@yahoo.com> wrote:
> Hi Mark,
>
> Yes, the use of the Muenchian method to solve your problem is very
> straightforward:
>
> source xml (the one provided by you, but reshuffled):
> ---------------------------------------------------
> <topics>
> <topic>Chimpanzee</topic>
> <topic>Aardvark</topic>
> <topic>Beetle, Smaller European Elm Bark</topic>
> <topic>Anteater</topic>
> <topic>Beetle, American Burying</topic>
> </topics>
>
> stylesheet:
> ----------
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:output method="text"/>
>
> <xsl:variable name="NL" select="'
'"/>
>
> <xsl:key name="kTopic" match="topic" use="substring(.,1,1)"/>
>
> <xsl:template match="/">
> <xsl:for-each select="/*/topic
> [
> generate-id()
> =
> generate-id(key('kTopic',
> substring(.,1,1)
> )[1]
> )
> ]">
> <xsl:sort select="substring(.,1,1)"/>
>
> <xsl:value-of select="concat($NL, substring(.,1,1))"/>
>
> <xsl:for-each select="key('kTopic',substring(.,1,1))">
> <xsl:value-of select="concat($NL, .)"/>
> </xsl:for-each>
> <xsl:value-of select="$NL"/>
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet>
>
> Result:
> -------
>
> A
> Aardvark
> Anteater
>
> B
> Beetle, Smaller European Elm Bark
> Beetle, American Burying
>
> C
> Chimpanzee
>
>
Just a minor addition: as they are at the moment, the results are not
sorted, but only grouped by their first letter.
Therefore, in the above code
> <xsl:for-each select="key('kTopic',substring(.,1,1))">
> <xsl:value-of select="concat($NL, .)"/>
> </xsl:for-each>
should actually be:
<xsl:for-each select="key('kTopic',substring(.,1,1))">
<xsl:sort select="."/>
<xsl:value-of select="concat($NL, .)"/>
</xsl:for-each>
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list