Subject: Re: [xsl] Conditional xsl:sort From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Thu, 13 Jun 2002 15:49:47 +0100 |
Hi David, > I have the following: > > ... > <xsl:for-each select="Transaction"> > <xsl:sort select="*[local-name() = string($sortby)]" > data-type="{$datatype}" order="{$order}"/> > > <xsl:if test="$sortby = 'Description'"> > <xsl:sort select="Code" data-type="number" order="{$order}"/> > </xsl:if> > ... > > and I'm getting this: > > ... > Keyword xsl:sort may not be used here. > ... > > for the second, conditional, xsl:sort. Why? Because xsl:sort cannot be used within an xsl:if. There are only two elements in which xsl:sort is legal in XSLT 1.0 -- within xsl:apply-templates and at the start of a xsl:for-each. To do conditional sorts you have to be a bit cunning. For the second sort, create an expression that only selects the Code element if the $sortby variable has the value 'Description', and use that: <xsl:for-each select="Transaction"> <xsl:sort select="*[local-name() = string($sortby)]" data-type="{$datatype}" order="{$order}" /> <xsl:sort select="Code[$sortby = 'Description']" data-type="number" order="{$order}" /> ... </xsl:for-each> If the $sortby variable isn't 'Description' then Code[$sortby = 'Description'] won't select any nodes, so all the Transactions will be sorted by the empty string (the same value) for the second sort and it will have no effect. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Conditional xsl:sort, David B. Bitton | Thread | RE: [xsl] Conditional xsl:sort, Michael Kay |
Re: AW: AW: [xsl] Problem parsing c, David Carlisle | Date | [xsl] Unwrapping trees, Norman Walsh |
Month |