Subject: Re: Nicer way to change context-node than xsl:for-each ?
From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx>
Date: Sat, 5 Dec 2009 20:35:57 +0530
|
Thanks, Dimitre for comments.
I was also thinking to propose a simpler syntax, for passing context
to call-template (as follows, please):
<xsl:call-template name="xx" context="nodeReference">
<!-- template contents -->
</xsl:call-template>
i.e, we can have an attribute on call-template, instead of wrapping it
within something like xsl:context (which looks much verbose).
On Sat, Dec 5, 2009 at 8:06 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> Such a feature is not needed, especially in XSLT 2, where the use of
> <xsl:call-template> shouldn't be recommended -- why would anyone
> prefer it to the use of <xsl:function> ?
I think, xsl:function can be only called within XPath 2 expressions,
whereas, call-template can be part of a sequence constructor. IMHO,
both are useful.
> Even in XSLT 1.0 <xsl:call-template> is not necessary -- one can
> always accomplish the same with <xsl:apply-templates>
I largely agree. But I think, xsl:apply-templates is kind of push
processing (and tries to find nodes in the input document, and applies
the match template on them).
But xsl:call-template looks to me, truly a subroutine (but it being
able to inherit the context of caller, makes it different than a true
black box subroutine). It can take certain arguments, and can return a
RTF (in XSLT 1) or a sequence (in 2.0).
btw, I think having following enhancement to 2.0 language:
<xsl:call-template name="xx" inherit-context="no">
<!-- template contents -->
</xsl:call-template>
(default value of, inherit-context can be "yes")
can make call-template instructions truly black box subroutine calls.
I think, this will be useful to users.
But I agree, that xsl:call-template and xsl:apply-templates can
archive similar objectives, in many cases.
--
Regards,
Mukul Gandhi
|