[xsl] first n nodes from a current-group

Subject: [xsl] first n nodes from a current-group
From: "Manish_Jaiswal" <Manish_Jaiswal@xxxxxxxxxx>
Date: Thu, 7 Feb 2008 18:52:47 +0530
Hi All,

I did a transformation of a XML file.The description is given below-

input XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<School>
<student rec='1'>
<name>Robart J</name>
</student>
<student rec='2'>
<name>Alex M; Peter R; Robart J</name>
</student>
<student rec='3'>
<name>Alex M;Robart J; Dave T</name>
</student>
<student rec='4'>
<name>Alex M;Robart J; Peter R</name>
</student>
</School>

XSLT , I used-

<School>
<xsl:for-each-group select=" School/student group-by="name/tokenize(.,
';\s*')">
<xsl:sort data-type="number" select="count(current-group())"
order="descending" />
<xsl:sort select="current-grouping-key()"/>
<xsl:for-each select="current-group()" >
<xsl:if test="position()=2">
<name count="{count(current-group())}">
<xsl:value-of select="current-grouping-key()"/>
</name>
</xsl:if>
</xsl:for-each>
</xsl:for-each-group>
</School>

I m getting output like-
<School>
<name count='4'>Robart J</name>
<name count='3'>Alex M</name>
<name count='2'>Peter R</name>
</School>

That is all the name elements having more than or equal to 2 count
value.

But I wanted only the first two name elements having highest counts.
that is output like:


<School>
<name count='4'>Robart J</name>
<name count='3'>Alex M</name>
</School>

Please help me to do the same.
Thanks in advance.

Manish


DISCLAIMER:
This email (including any attachments) is intended for the sole use of the
intended recipient/s and may contain material that is CONFIDENTIAL AND PRIVATE
COMPANY INFORMATION. Any review or reliance by others or copying or
distribution or forwarding of any or all of the contents in this message is
STRICTLY PROHIBITED. If you are not the intended recipient, please contact the
sender by email and delete all copies; your cooperation in this regard is
appreciated.

Current Thread