xsl-list
[Top] [All Lists]

RE: [xsl] Sorting Using A Predefined Order

2007-06-22 07:41:21
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(_at_)asiatype(_dot_)com] 
Sent: Thursday, June 21, 2007 9:28 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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.
______________________________________________________________________
__

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



  

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>