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)
David C. wrote:
> Personally an xsl:append looks deeply suspect to me, if it's
> required for functions why isn't it required for the almost
> identical situation of binding node sets to variables? If it is also
> required for that is "append" the right concept for a declarative
> language, or should it be more like
> <xsl:variable select="foo[postion('some named construct corresponding
> to an xsl:sort setup') < 5]"/>
So what about this:
<xsl:variable select="$nodes[sort:position($nodes) < 5]" />
<exsl:function name="sort:position">
<xsl:param name="node-set" select="/.." />
<xsl:variable name="current" select="." />
<xsl:choose>
<xsl:when test="count($current | $node-set) = count($node-set)">
<xsl:for-each select="$node-set">
<xsl:sort />
<xsl:if test="count(.|$current) = 1">
<exsl:result select="position()" />
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<exsl:return select="0" />
</xsl:otherwise>
</xsl:choose>
</exsl:function>
Naturally in a production version there would be more
parameters/arguments to allow for different sort orders etc.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list