Re: Designs for XSLT functions (Was: Re: [xsl] RE: syntax sugar for call-template)

Subject: Re: Designs for XSLT functions (Was: Re: [xsl] RE: syntax sugar for call-template)
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Thu, 22 Feb 2001 22:09:32 +0000
Hi Steve,

> Why couldn't you implement the function without
> recursion with a technique like:
>
>    <exsl:function>
>      <xsl:variable name="foo">
>        <xsl:for-each>
>          <xsl:sort ... >
>            <xsl:if test="5 <= position()">
>              <xsl:copy-of select="."/>
>            </xsl:if>
>        </xsl:for-each>
>      </xsl:variable>
>      <exsl:return select="$foo"/>
>    </exsl:function>

Because that creates a new node set stuffed full of *copies* of the
nodes, not the original nodes.  You could do:

   <exsl:function>
      <xsl:param name="nodes" />
      <xsl:variable name="foo">
         <xsl:for-each select="$nodes">
            <xsl:sort />
            <xsl:if test="5 &lt;= position()">
               <node id="{generate-id()}" />
            </xsl:if>
         </xsl:for-each>
      </xsl:variable>
      <exsl:return select="$nodes[generate-id() = $foo/node/@id]" />
   </exsl:function>

as a non-recursive and fairly hacky solution.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread