|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Designs for XSLT functions (Was: Re: RE: syntax su
Hi Clark,
> Not a very good example... but then again, I was trying to think of
> a syntax that would allow a node set to be built-up over the course
> of the function, and <exsl:return ... /> does not do this.
I did come up with a use case that I think touches on what you're
talking about here, namely returning the first five nodes in an
alphabetical sort of a node set.
<xsl:variable select="my:first-alphabetically($nodes, 5)" />
Under your scheme I think you would use:
<exsl:function name="my:first-alphabetically">
<exsl:param name="nodes" />
<exsl:param name="number" />
<xsl:for-each select="$nodes">
<xsl:sort />
<xsl:if test="position() <= $number">
<exsl:append select="." />
</xsl:if>
</xsl:for-each>
</exsl:function>
Without something like exsl:append, you would need to use a recursive
solution which is longer and uglier, but it could be done:
<exsl:function name="my:first-alphabetically">
<exsl:param name="nodes" />
<exsl:param name="number" />
<xsl:choose>
<xsl:when test="$number = 1">
<xsl:for-each select="$nodes">
<xsl:sort />
<xsl:if test="position() = 1">
<exsl:result select="." />
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="first"
select="my:first-alphabetically($nodes, 1)" />
<xsl:variable name="rest"
select="$nodes[count(.|$first) != 1]" />
<exsl:result select="$first |
my:first-alphabetically($rest,
$number - 1)" />
</xsl:otherwise>
</xsl:choose>
</exsl:function>
I *think* that if you need to build up a node set gradually then it's
always possible to use a recursive solution to do it, but I could be
wrong. I'd like to see a use case that couldn't be solved
recursively, so where exsl:append or exsl:reference-of would be
necessary.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








