Subject: Re: [xsl] recreate apply-templates using a function From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Sun, 12 Feb 2012 08:43:23 -0800 |
> What's the issue there? > > It should really have have a return type of item()*, and the param > should really be called 'node-list' rather than 'context': > > <xsl:function name="f:apply-templates" as="item()*"> > <xsl:param name="node-list" as="node()*"/> > <xsl:apply-templates select="$node-list/> > </xsl:function> > > anything else? > One possible issue is that people may want the results to correspond to the sequence order of the argument. This could be "assured" if you use: <xsl:for-each select="$node-list"> <xsl:apply-templates select="."/> </xsl:for-each> However, if you use this apply() function in: /a/b/f:apply() the results will be deduplicated and sorted in document order. If new nodes are created, their order will be unpredictable (implementation-dependent). It is still OK to use such a function within an XPath expression if order and deduplication don't matter, though. Cheers, Dimitre On Sun, Feb 12, 2012 at 8:30 AM, Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote: > Hi Dimitre, > > On 12 February 2012 15:48, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: >> On Sun, Feb 12, 2012 at 5:24 AM, Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote: >>> If you needed to call apply-templates using a function call (say as >>> part of an xpath) any reason why this wouldn't be fine: >>> >>> <xsl:function name="f:apply-templates" as="node()*"> >>> B B <xsl:param name="context" as="node()*"/> >>> B B <xsl:apply-templates select="$context"/> >>> </xsl:function> >>> >>> with: >>> >>> <xsl:sequence select="f:apply-templates(child::node())"/> >>> >>> (ignoring modes and params etc) >>> >>> Seems ok to me... >> >> Except when you use it as the second operand of the / operator. > > What's the issue there? > > It should really have have a return type of item()*, and the param > should really be called 'node-list' rather than 'context': > > <xsl:function name="f:apply-templates" as="item()*"> > B <xsl:param name="node-list" as="node()*"/> > B <xsl:apply-templates select="$node-list/> > </xsl:function> > > anything else? > > -- > Andrew Welch > http://andrewjwelch.com > -- Cheers, 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 ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] recreate apply-templates , Andrew Welch | Thread | Re: [xsl] recreate apply-templates , Dimitre Novatchev |
Re: [xsl] recreate apply-templates , Andrew Welch | Date | [xsl] Grouping by distinct combinat, Anthony Marendy |
Month |