This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Adjusting sorted list
- From: TSchutzerWeissmann at uk dot imshealth dot com
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 16 May 2002 16:07:06 +0100
- Subject: RE: [xsl] Adjusting sorted list
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hello Andrew,
How about this:
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:key name='bs' match ='b' use='.'/>
<xsl:template match='/'>
<xsl:apply-templates select='*'/>
</xsl:template>
<xsl:template match ="a">
<xsl:variable name='uniques' select='b[count(. | key("bs",
.)[1]) = 1]'/>>
<xsl:for-each select='b'>
<xsl:sort select='.'/>
<xsl:copy>
<xsl:attribute name='rank'>
<xsl:value-of
select='count($uniques[. < current()]) + 1'/>
</xsl:attribute>
</xsl:copy>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
It's the only way I can think of doing it.
Tom Weissmann
-----Original Message-----
From: Andrew Timberlake [mailto:andrew.lists@ddd.co.za]
Sent: 16 May 2002 15:05
To: XSL-List@lists.mulberrytech.com
Subject: [xsl] Adjusting sorted list
I have the following XML:
<a>
<b>4</b>
<b>9</b>
<b>6</b>
<b>1</b>
<b>8</b>
<b>6</b>
<b>4</b>
<b>7</b>
</a>
I am trying to generate the following ouput:
<a>
<b rank="1">1</b>
<b rank="2">4</b>
<b rank="2">4</b>
<b rank="3">6</b>
<b rank="3">6</b>
<b rank="4">7</b>
<b rank="5">8</b>
<b rank="6">9</b>
</a>
Using xsl:for-each with a sort on b and then using position() I can get
a ranking from 1 to 8 but I have no idea how to achieve the above.
I have dug around in the archives for some ideas but to no avail.
I see that I can't use a variable and adjust it's value with each
iteration (as it's not actually iterating).
I have also looked into using a recursive named template but am not sure
how to achieve the above and sort the output???
Thanks in advance for any help.
Andrew
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list