Subject: RE: Natural Sort
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 25 Jan 2006 14:13:59 -0000
|
> The first way would also work in XSLT1, the second way uses xpath2
> regexp to sort media1 as media01.
It only works if all the numeric parts are one or two digits.
I can't think of an easy way of generalizing it, however.
Michael Kay
http://www.saxonica.com/
>
> David
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
> <xsl:output indent="yes" omit-xml-declaration="yes"/>
>
> <xsl:template match="x">
> <x>
> <a>
> <xsl:for-each select="server">
> <xsl:sort
> select="translate(substring-before(@dn, '.'),'0123456789','')"
> data-type="text"
> order="ascending"/>
> <xsl:sort
> select="translate(substring-before(@dn,
> '.'),'abcdefghijklmnopqrstuvwxyz','')"
> data-type="number"
> order="ascending"/>
> <xsl:copy-of select="."/>
> </xsl:for-each>
> </a>
> <b>
> <xsl:for-each select="server">
> <xsl:sort
> select="replace(@dn,'([^0-9])([0-9])([^0-9])','$10$2$3')"/>
> <xsl:copy-of select="."/>
> </xsl:for-each>
> </b>
> </x>
> </xsl:template>
>
>
> </xsl:stylesheet>
>
> ______________________________________________________________
> __________
> This e-mail has been scanned for all viruses by Star. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ______________________________________________________________
> __________
|