Re: [xsl] Special Sort order

Subject: Re: [xsl] Special Sort order
From: "Darcy Parker" <darcyparker@xxxxxxxxx>
Date: Thu, 8 May 2008 09:45:18 -0400
I was looking at this problem this morning and like your solution with
translate() to bias the sort.

To account for cases where Z and 0-9 need to be sorted with Z ahead of
numbers, I suggest modifying the 2nd <xsl:sort> as follows:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:template match="NLIST">
	<xsl:for-each select="NITEM">
		<xsl:sort select="translate(PNR,'0123456789','ZZZZZZZZZZ')"/>
<!--Sorts with numbers pushed to same position as Z-->
		<xsl:sort select="translate(PNR,'9876543210Z','ZYXWVUTSRQP')"/>
<!--Next sort with numbers ahead of Z-->
		<xsl:value-of select="."/>
	</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Using a modified XML:
<NLIST>
   <NITEM>
     <PNR>AN4</PNR>
   </NITEM>
    <NITEM>
     <PNR>A0B</PNR>
   </NITEM>
    <NITEM>
     <PNR>AZB</PNR>
   </NITEM>
   <NITEM>
     <PNR>7228590-901</PNR>
   </NITEM>
   <NITEM>
     <PNR>291300A</PNR>
   </NITEM>
   <NITEM>
     <PNR>CCR244SS-3-2</PNR>
   </NITEM>
   <NITEM>
     <PNR>7028590-901</PNR>
   </NITEM>
    <NITEM>
     <PNR>MS20995C20</PNR>
   </NITEM>
 </NLIST>

Output is:

     AN4
     AZB
     A0B
     CCR244SS-3-2
     MS20995C20
     291300A
     7028590-901
     7228590-901

Darcy
On Thu, May 8, 2008 at 8:39 AM, David Carlisle <davidc@xxxxxxxxx> wrote:
>
>
>  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>
>
>  <xsl:template match="NLIST">
>  <xsl:for-each select="NITEM">
>  <xsl:sort select="translate(PNR,'0123456789','ZZZZZZZZZZ')"/>
>  <xsl:sort select="."/>
>  <xsl:value-of select="."/>
>
>  </xsl:for-each>
>  </xsl:template>
>  </xsl:stylesheet>
>
>
>  $ saxon sn.xml sn.xsl
>  <?xml version="1.0" encoding="utf-8"?>
>       AN4
>
>       A0B
>
>       CCR244SS-3-2
>
>       MS20995C20
>
>       291300A
>
>       7028590-901
>
>  ________________________________________________________________________
>  The Numerical Algorithms Group Ltd is a company registered in England
>  and Wales with company number 1249803. The registered office is:
>  Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
>
>  This e-mail has been scanned for all viruses by Star. The service is
>  powered by MessageLabs.
>  ________________________________________________________________________

Current Thread