Re: [xsl] Fwd: Parameterised Sorts

Subject: Re: [xsl] Fwd: Parameterised Sorts
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 10 Dec 2003 11:57:50 GMT
   <xsl:sort select="*[local-name()=string($sortRequested)]" 

the * means all element children, so..


     If $sortRequested = '@name' and name is an attribute of group it dosn't work.

in that case you are sorting on a key found by taking the element
children with local-name equal to the name "@foo" but there are no
elements called foo (element names are not allowed to begin  with @)

What you want in this case is to set your $sortRequested variable to
"foo" and then select the attribute with that name:


 <xsl:sort select="@*[local-name()=$sortRequested]"/>

(you don't need string() in either case as a comparison with
local-name() will always be a string comparison.)


Now you want to select either an element or an attribute with name foo
so that's:


 <xsl:sort select="(*|@*)[local-name()=$sortRequested]"/>

so long as no element has an attribute an and an element of the same
name. If you had

<x foo="1"><foo>2</foo></x>

and $sortRequested was "foo" then the above would sort as "1" as teh
attribute would be used not the element (as it's first in document
order)

David

-- 
http://www.dcarlisle.demon.co.uk/matthew

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread