This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Designs for XSLT functions (Was: Re: RE: syntax sugar for call-template)
- To: "Steve Muench" <Steve dot Muench at oracle dot com>
- Subject: Re: Designs for XSLT functions (Was: Re: [xsl] RE: syntax sugar for call-template)
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Thu, 22 Feb 2001 22:09:32 +0000
- CC: xsl-list at lists dot mulberrytech dot com
- Organization: Jeni Tennison Consulting Ltd
- References: <Pine.LNX.4.21.0102221455560.13644-100000@clarkevans.com><031a01c09d0d$9009c930$fc652382@us.oracle.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
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 <= 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