xsl-list
[Top] [All Lists]

RE: Sorting on different elements...

2004-01-22 03:32:26

Hi,

Sorry if this has been asked before - or is a daft question.

Is it possible to parameterise an <xsl:sort> ?

Example.

      <root>
              <data>
                      <firstname value="Fred"/>
                      <lastname value="Smith"/>
              </data>
              <data>
                      <firstname value="Tom"/>
                      <lastname value="Jones"/>
              </data>
              <data>
                      <firstname value="Myles"/>
                      <lastname value="Ward"/>
              </data>
              ...
      </root>

Sometimes I want to sort <data> on "firstname/@value" 
sometimes on "lastname/@value" based on a user parameter of some kind.

Is this possible?

You will need to an extension function if you want to evualate an xpath
at run time, so if you have:

 <xsl:param name="sortParam" select="'lastname/@value'"/>

Where you pass in the sort criteria as a parameter, you would need to
use:

 <xsl:sort select="saxon:evaluate($sortParam)"/>

The evaluate() extention function will turn a string into an xpath.


If your data was simple enough, or more to the point your sort criteria
was simple enough, such as a single element name:

 <xsl:param name="sortParam" select="'lastname'"/>

Then you can get away without using an extension functions, such as:

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

I think this still applies for xslt 2.0.

Cheers
andrew

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



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