RE: [xsl] Sorting By a calculated variable

Subject: RE: [xsl] Sorting By a calculated variable
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 4 Sep 2006 07:58:52 +0100
The variable $totale has the same value for every item in your list, so
sorting by $totale will have no effect. You need to compute the sort key for
each individual item in the list. This can be a bit tricky in XSLT 1.0
because the computation must be done within a single XPath expression. There
are various tricks for getting around the limitations this imposes. But I'm
not going to suggest code in your case because I can't see the source
document structure and your existing computation looks rather strange.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Giancarlo Rossi [mailto:giancarlo_rossi@xxxxxxxxxx] 
> Sent: 03 September 2003 20:26
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Sorting By a calculated variable
> 
> I need to implement a sorting by a calculating variable..
> I need to sort By $totale and display the $totale value.
> In this way  the values are not displayed...
> 
> Exist a way able to apply this kind of sort ?
> 
> 
> <xsl:template match="/">
> <xsl:call-template name="positionfilter"> <xsl:with-param 
> name="sortedlist"> <xsl:for-each 
> select="/CommandList/CheckRouting/RouterList/Router/GroupList/
> Group/OutwardL
> ist/Outward" > <xsl:variable name="root" 
> select="../../ReturnList/Return" />
> 
> <xsl:variable name="totale">
> <xsl:choose>
> <xsl:when test="Price/Amount">
> <xsl:value-of
> select="format-number(number(Price/Amount)+number($root/Price/
Amount),'#.##'
> )"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="//Group/Price/Amount/text()"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> 
> <xsl:copy-of select="."/>
> </xsl:for-each>
> </xsl:with-param>
> </xsl:call-template>
> </xsl:template>
> 
> <xsl:template name="positionfilter">
> <xsl:param name="sortedlist"/>
> <xsl:param name="totale"/>
> <xsl:for-each select="msxsl:node-set($sortedlist)/*">
> <xsl:sort select="$totale"/>
> <xsl:value-of select="$totale"></xsl:value-of><br/>
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet> 

Current Thread