[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Sorting Using A Predefined Order


Subject: RE: [xsl] Sorting Using A Predefined Order
From: "Angela Williams" <Angela.Williams@xxxxxxxxxxxxxxxxxx>
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
> powered by MessageLabs.
> ______________________________________________________________________
> __


Current Thread