## RE: [xsl] Sorting Using A Predefined Order

 Subject: RE: [xsl] Sorting Using A Predefined Order From: "Angela Williams" Date: Fri, 22 Jun 2007 09:41:01 -0500
```This solution was offered up when I had the same question a few weeks
ago.

<xsl:function name="my:performSort" as="element()+">
<xsl:param name="list" as="element()+" />
<xsl:param name="sortKey" as="element()+" />

<xsl:variable name="sortedList" as="element()+">
<xsl:for-each select="\$list">
<xsl:sort select="*[name() = \$sortKey[1]]" />
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:variable>

<xsl:sequence select="if (\$sortKey[2])
then  my:performSort(\$sortedList,
subsequence(\$sortKey, 2))
else \$sortedList" />
</xsl:function>

Thanks!
Angela

-----Original Message-----
From: Jeff Sese [mailto:jsese@xxxxxxxxxxxx]
Sent: Thursday, June 21, 2007 9:28 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Sorting Using A Predefined Order

Thanks for all the answers, I think I'll gonna go with Mr. Kay's
solution cause the defined ordering lists a large number of keys.

-- Jeff

David Carlisle wrote:
> Andrew>  which can also be written as:
>
> Andrew>   <xsl:apply-templates select="(div[2], div[3], div[5],
> Andrew> div[1], div[4])"/>
>
>
> oh yes if we're using xpath2 there's other ways as well eg
>
> <xsl:apply-templates select="for \$p in (2,3,5,1,4) return div[\$p]"/>
>
>
> this is equivalent to Andrew's although actually neither's quite
> equivalent to my original suggestion of 5 apply-templates calls, as in

> that case position() and last() would be equal to 1 each time whereas
> in either of the versions here, last() is 5 and position() would be
> 1..5, which is often preferable.
>
> David
>
> ______________________________________________________________________
> __ 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