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: Fri, 23 Feb 2001 07:48:55 +0000
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') &lt; 5]"/>

So what about this:

<xsl:variable select="$nodes[sort:position($nodes) &lt; 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


Current Thread