Re: sorting & counting

Subject: Re: sorting & counting
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 28 Jun 2000 22:03:54 +0100

>1. sort them by 'priority'
>2. leave, say, only 3 nodes in the result

Here's a solution.  First, specify the number of nodes you want in a
parameter, so that you can change it whenever you like:

<xsl:param name="nodes" select="'3'" />

Next, you want to treat the nodes individually despite them being nested
inside each other, and you want to sort them within your output in order of
priority.  You can use either xsl:for-each or xsl:apply-templates to select
the nodes within the document, whatever their level (using //node) and
xsl:sort within whichever you use to sort in order of priority.  For example:

  <xsl:for-each select="//node">
    <xsl:sort select="@priority" order="ascending" />

Within that, you only want to output anything if the position of the node
within that sorted list is less than or equal to the number of nodes you
want in the result.  In other words:

  <xsl:for-each select="//node">
    <xsl:sort select="@priority" order="ascending" />
    <xsl:if test="position() &lt;= number($nodes)">
      <xsl:value-of select="name" />

Tested and works in SAXON.

I hope this helps,


Dr Jeni Tennison
Epistemics Ltd * Strelley Hall * Nottingham * NG8 6PE
tel: 0115 906 1301 * fax: 0115 906 1304 * email: jeni.tennison@xxxxxxxxxxxxxxxx

 XSL-List info and archive:

Current Thread