xsl-list
[Top] [All Lists]

Re: Re: Re: Using XSL for a "world records" table

2003-05-18 04:26:47

"Ryan Heise" <rheise(_at_)it(_dot_)uts(_dot_)edu(_dot_)au> wrote in message
news:20030518190113(_dot_)D12272(_at_)linus(_dot_)it(_dot_)uts(_dot_)EDU(_dot_)AU(_dot_)(_dot_)(_dot_)
On Sun, May 18, 2003 at 10:35:18AM +0200, Dimitre Novatchev wrote:

         <xsl:value-of select="position() + count(/*/record[time &lt;
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 &lt;
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