Subject: [xsl] Re: Dynamic number of sort key component? From: Fabre Lambeau <fabre.lambeau@xxxxxxxxx> Date: Fri, 14 May 2010 14:45:57 +0100 |
I'm writing a tool that allows my users to query an XML document a-la-SQL (but simplified). For example, given an XML document such as: <table> <row> <col name="a">1</col> <col name="b">2</col> <col name="c">3</col> <col name="d">4</col> </row> <row> <col name="a">bla</col> <col name="b">bli</col> <col name="c">blo</col> <col name="d">blu</col> </row> <!-- ... --> </table> I'd like them to be able to say something like: SELECT a,b,c,d ORDER BY a ASC,b DESC GROUP BY a,c,d My component (XSLT stylesheet) takes that query and effectively processes it in XSLT. The GROUP BY statement is easy to process, since I can just concatenate the values for the corresponding <col> elements, and use that string as a key to a for-each-group. However, I can't find a way to do the sorting (for which the order is different for each individual column). What I seem to need is the ability to have a dynamic number of sort key components, which as far as I know is not possible The following is obviously not possible: <xsl:perform-sort select="col"> <xsl:for-each select="tokenize($group-by, ',')"> <xsl:sort select="col[@name=string-before(current(),' ']) order="{string-after(current(),' ']}ending"/> </xsl:for-each> </xsl:perform> Can anyone think of a way to do this (whilst retaining the ability to have a dynamic list of ORDER BY columns, each one specifying its own order)? Unfortunately, I don't think I have the ability to generate a separate XSLT sheet after parsing the query string and execute it, as my engine is all in XSLT (executed with AltovaXML) -- Fabre Lambeau
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xsl:key, predicates and d, David Carlisle | Thread | RE: [xsl] Re: Dynamic number of sor, Michael Kay |
Re: [xsl] xsl:key, predicates and d, G. Ken Holman | Date | Re: [xsl] xsl:key, predicates and d, Nic Gibson |
Month |