RE: [xsl] Correctly sorting ID's

Subject: RE: [xsl] Correctly sorting ID's
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Tue, 21 Jan 2003 17:27:02 -0000
> 
> In a transform, is it possible to correctly sort these poorly 
> formed id's listed below

If you're prepared to write some recursive XSLT code to transform the
keys, you could achieve this by the technique of prefixing each numeric
component with a digit indicating its length. Thus 1 becomes 11, 10
becomes 210, 15 becomes 215, 109 becomes 3109. This will give you a key
that collates alphabetically.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 

> 
> Currently my standard sort:
> 
> <xsl:apply-templates>
> 	<xsl:sort select="node()/@id"/>
> </xsl:apply-templates>
> 
> Returns this:
> 
> <someNode id="CM09.1"/>
> <someNode id="CM09.1.5"/>
> <someNode id="CM09.10"/>
> <someNode id="CM09.10.10.3"/>
> <someNode id="CM09.10.15"/>
> <someNode id="CM09.18.2"/>
> <someNode id="CM09.2"/>
> <someNode id="CM09.2.2"/>
> <someNode id="CM09.22"/>
> <someNode id="CM09.22.1"/>
> 
> it's the old classic... 1 then 10 before 2 etc.
> 
> I really need them sorted like the following:
> 
> <someNode id="CM09.1"/>
> <someNode id="CM09.1.5"/>
> <someNode id="CM09.2"/>
> <someNode id="CM09.2.2"/>
> <someNode id="CM09.10"/>
> <someNode id="CM09.10.10.3"/>
> <someNode id="CM09.10.15"/>
> <someNode id="CM09.18.2"/>
> <someNode id="CM09.22"/>
> <someNode id="CM09.22.1"/>
> 
> I'm looking now to see if I can work this out and I was 
> wondering if anybody would be able to help me with the 
> correct sort selection.
> 
> The only other issue to be aware of is that the dots can go 
> on indefinitely and I don't know until runtime the highest 
> number of dot's in the any one id will be.
> 
> If anybody could point me to a resource that deals with this 
> I would be most grateful.
> 
> Regards,
> 
> Niki Dinsey
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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


Current Thread