|
Subject: Re: Designs for XSLT functions (Was: Re: [xsl] RE: syntax sugar for call-template) From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Wed, 21 Feb 2001 14:50:01 +0000 |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: Designs for XSLT functions (Was, Clark C. Evans | Thread | Re: Designs for XSLT functions (Was, Clark C. Evans |
| RE: [xsl] XQuery (was Designs for X, DPawson | Date | RE: [xsl] obtaining details from a , William Crawley |
| Month |