Are there distinctions to be drawn that are not merely idiomatic or
stylistic between a stylesheet function and a named template?
The main differences are:
* functions are called from XPath expressions, templates using call-template
* function arguments are specified by position and are always mandatory
* functions operate in an empty context, templates inherit a lot of context
from the caller
Generally, writing code as functions is a better way to make it reusable,
since function calls can be composed (combined) a lot more effectively than
template calls. But I continue to use templates when the main aim is to
create nodes and write them to a result tree.
Michael Kay
http://www.saxonica.com/
That is, are there runtime considerations between a pair of
named templates
like this:
<xsl:template name="correctDate">
<xsl:param name="dateParts"/>
<xsl:variable name="tokens"
select="fn:tokenize($dateParts, '/')"/>
<xsl:value-of select="$tokens[3]"/>
<xsl:text>-</xsl:text>
<xsl:call-template name="pad">
<xsl:with-param name="digits" select="$tokens[1]"/>
</xsl:call-template>
<xsl:text>-</xsl:text>
<xsl:call-template name="pad">
<xsl:with-param name="digits" select="$tokens[2]"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="pad">
<xsl:param name="digits"/>
<xsl:choose>
<xsl:when test="fn:string-length($digits) = 1">
<xsl:value-of select="concat('0', $digits)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$digits"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
And this pair of user defined functions:
<xsl:function name="sfn:correctDate" as="xs:date">
<xsl:param name="s"/>
<xsl:variable name="seq"
select="fn:tokenize($s, '/')"/>
<xsl:value-of
select="concat($seq[3],'-',sfn:pad($seq[1]),'-',sfn:pad($seq[2]))"/>
</xsl:function>
<xsl:function name="sfn:pad">
<xsl:param name="digits"/>
<xsl:choose>
<xsl:when test="fn:string-length($digits) = 1">
<xsl:value-of select="concat('0',$digits)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$digits"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
Both contain template bodies, the tree representing the named
*correctDate*
template is a few nodes bigger, perhaps. I can call
functions from within
XPath expressions. Anything else to consider in terms of execution
efficiency?
TIA,
Mike
-----------------------------------
Mike Haarman,
XSL Developer,
Internet Broadcasting Systems, Inc.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--