Subject: [xsl] Re: Re: Using XSL for a "world records" table From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Sun, 18 May 2003 10:35:18 +0200 |
> Thanks Dimitre. It almost works with grouping, but now the record in 3rd > place is listed as 2nd place. That is: > > Place Time Name > 1 11 seconds Person 1 > 1 11 seconds Person 2 > 2 12 seconds Person 3 > > My code looks like this: > > <xsl:for-each select="record[count(. | key('records-by-time', time)[1]) = 1]"> > <xsl:sort data-type="number" select="time"/> > <xsl:apply-templates select="key('records-by-time', time)"> > <xsl:with-param name="place" select="position()"/> > </xsl:apply-templates> > </xsl:for-each> > > As you see, I'm using the value of position() for place. > > Do you know of any way to get around this? Hi Ryan, Use something like this: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:key name="kByTime" match="record" use="time"/> <xsl:template match="/"> <xsl:for-each select="/*/record[generate-id() = generate-id(key('kByTime', time )[1] ) ]"> <xsl:sort select="time" data-type="number"/> <xsl:for-each select="key('kByTime', time)"> <xsl:sort select="@date" data-type="number"/> <xsl:text>
</xsl:text> <xsl:value-of select="position() + count(/*/record[time < current()/time])"/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet> When applied on this source.xml (you never provided your original xml, so I use my own here): <records> <record name="abc" date="20011130"> <time>12</time> </record> <record name="abc" date="19991130"> <time>12</time> </record> <record name="abc" date="20011130"> <time>18</time> </record> <record name="abc" date="20011130"> <time>11</time> </record> <record name="abc" date="19991130"> <time>11</time> </record> <record name="abc" date="20011130"> <time>22</time> </record> <record name="abc" date="20011130"> <time>15</time> </record> </records> The wanted result is produced: 1<record name="abc" date="19991130"> <time>11</time> </record> 2<record name="abc" date="20011130"> <time>11</time> </record> 3<record name="abc" date="19991130"> <time>12</time> </record> 4<record name="abc" date="20011130"> <time>12</time> </record> 5<record name="abc" date="20011130"> <time>15</time> </record> 6<record name="abc" date="20011130"> <time>18</time> </record> 7<record name="abc" date="20011130"> <time>22</time> </record> ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: Using XSL for a "worl, Ryan Heise | Thread | [xsl] Re: Re: Using XSL for a "worl, Dimitre Novatchev |
Re: [xsl] HTML Processor for XML XS, Daniel Veillard | Date | [xsl] Re: Re: Using XSL for a "worl, Dimitre Novatchev |
Month |