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