This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: sorting & counting


Igor,

>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" />
    ...
  </xsl:for-each>

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" />
    </xsl:if>
  </xsl:for-each>

Tested and works in SAXON.

I hope this helps,

Jeni

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


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]