Re: [xsl] Nicer way to change context-node than xsl:for-each ?

Subject: Re: [xsl] Nicer way to change context-node than xsl:for-each ?
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sat, 5 Dec 2009 07:55:35 -0800
On Sat, Dec 5, 2009 at 7:05 AM, Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:
> 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">
> B  <!-- 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).

If I were on the WG I wouldn't spend time on this -- this is largely
obsolete, unnecessary, dead.

>> 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.

The use of an <xsl:function> to produce content is simple:

  <xsl:sequence select="my:foo(bar)"/>

>> 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).

Didn't you know that <xsl:apply-templates> can be used in pull-style
processing? Modes and uniquely namespaced nodes should light a bulb :)

Anyone (who hasn't already come to this conclusion) can find all facts
and conclude that the following is not needed:

> 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">
> B  <!-- 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.

Dimitre Novatchev
Truly great madness cannot be achieved without significant intelligence.
To invent, you need a good imagination and a pile of junk
Never fight an inanimate object
You've achieved success in your field when you don't know whether what
you're doing is work or play
I enjoy the massacre of ads. This sentence will slaughter ads without
a messy bloodbath.

Current Thread