Subject: RE: [xsl] Dynamic Sorting From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Fri, 8 Nov 2002 08:52:10 -0000 |
The usual solution, which covers simple cases, is <xsl:sort select="*[name()=$sortkey]"/> For more complex cases you need to either (a) use xx:evaluate(), or (b) generate or modify the stylesheet source before its compiled. Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Ben Macaulay > Sent: 07 November 2002 19:34 > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Dynamic Sorting > > > Question -> Can you define a template that allows you to > define, at runtime, the elements that you want to sort on? > For instance, we have an XML document as follows. > > <records> > <contact id="0001"> > <title>Mr</title> > <forename>John</forename> > <surname>Smith</surname> > </contact> > <contact id="0002"> > <title>Dr</title> > <forename>Amy</forename> > <surname>Jones</surname> > </contact> > ... > <records> > > What we want to do is sort by (surname, forename), or sort by > (title, surname), or whatever we decide on the day. In our > XSL, we would like to be able to specify variables that > dictate how the sorting should be done. For instance, > consider the following XSL extract. > > <xsl:variable name="sort-by-element-1" value="surname" /> > <xsl:variable name="sort-by-element-2" value="forename" /> > > In reality we are not going to hard code the variable values > like this, but rather pull them in from another document by > way of the document() function, but that's not important right now. > > The problem is, later on in the XSL we can't have <xsl:sort > select="{$sort-by-element-1}" /> since xsl:sort's select > attribute doesn't accept attribute value templates. You can > specify attribute value templates for xsl:sort's other > attributes, for instance the article at > http://www.biglist.com/lists/xsl-list/archives/200012/msg00392 .html demonstrates how to dynamically specify a descending or ascending sort order. However you can't do this for the select attribute. Short of creating nonportable XSL by using saxon:evaluate() or xalan:evaluate() I can't see a way around this. Any suggestions? Can this kind of dynamic sorting be done at all? Cheers, Ben Macaulay Senior Software Engineer DHL Worldwide Express XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Dynamic Sorting, Américo Albuquerque | Thread | [xsl] UTF-8, RTF and XSLT, Russell Kohn |
[xsl] nbsp is not that hard, folks, Mike Brown | Date | RE: [xsl] not()'ing a false variabl, Michael Kay |
Month |