Subject: Re: Re: Re: Using XSL for a "world records" table
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Sun, 18 May 2003 13:26:47 +0200
|
"Ryan Heise" <rheise@xxxxxxxxxxxxx> wrote in message
news:20030518190113.D12272@xxxxxxxxxxxxxxxxxxxxxx
> On Sun, May 18, 2003 at 10:35:18AM +0200, Dimitre Novatchev wrote:
>
> > <xsl:value-of select="position() + count(/*/record[time <
> > current()/time])"/>
>
> This looks nifty. If you just use the count() idea, keys are not
> required:
>
> <xsl:for-each select="record">
> <xsl:sort data-type="number" select="time"/>
> <xsl:apply-templates select=".">
> <xsl:with-param name="place" select="1 + count(/*/record[time <
current()/time])"/>
> </xsl:apply-templates>
> </xsl:for-each>
>
> I also just figured out another approach that just uses keys and not
> count:
>
> <xsl:for-each select="record">
> <xsl:if test="not(preceding-sibling::record/time = time)">
> <xsl:apply-templates select="key('records-by-time', time)">
> <xsl:with-param name="place" select="position()"/>
> </xsl:apply-templates>
> </xsl:if>
> </xsl:for-each>
This presupposes that "record" elements are already sorted by "time" in the
source xml document. Also the "place" parameter will not select what you
want.
>
> I don't know which way is best, though. I guess whichever way runs the
> fastest :-)
Usually using keys is much faster, assuming that nodes are referenced more
than once.
=====
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 |
Michael Kay - Sun, 18 May 2003 13:04:47 -0400 (EDT)
- Ryan Heise - Sun, 18 May 2003 18:56:39 -0400 (EDT)
- Michael Kay - Mon, 19 May 2003 10:03:55 -0400 (EDT)
- shadab - Mon, 19 May 2003 11:00:30 -0400 (EDT)
|
|