Subject: Re: 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.
> ________________________________________________________________________
|