RE: [xsl] Sorting in descending order on the sum of a calculation

Subject: RE: [xsl] Sorting in descending order on the sum of a calculation
From: Joshua.Kuswadi@xxxxxxxxxxxxxxxxxxxx
Date: Thu, 29 Nov 2001 16:45:55 +1100
Hi there,

>   <xsl:for-each select="//referers/referer">
>    <xsl:sort select="@page" order="ascending"/>
>    </xsl:for-each>

The above xsl:sort is sorting on the page attribute in ascending alphabetical, which results in the output you are getting.

Looks like you will need to group by @page to get all the distinct pages and then sort on the calculation of the number of hits. The below is untested and untried.

<!-- Select all referer elements -->
<xsl:variable name="refererPages" select="//referers/referer" />
<!-- Select the distinct referer elements -->
<xsl:variable name="distinctRefererPages" select="$refererPages[@page != preceding::referer/@page]" />

<xsl:for-each select="$distinctRefererPages">
 <!-- Sort by sum of the hits attribute of all referer elements where the page attribute is the same as that in the $distinctRefererPages -->
 <xsl:sort select="sum(//referers/referer[@page = current()/@page]/@hits)" order="descending" />


This message and any attachment is confidential and may be privileged or otherwise protected from disclosure.  If you have received it by mistake please let us know by reply and then delete it from your system; you should not copy the message or disclose its contents to anyone.

 XSL-List info and archive:

Current Thread