Reputation: 6040
I am considering using either <xsl:param>
or <xsl:variable>
when defining an <xsl:template name="myTemplate">
that will be called in another XSL file.
Legacy code seems to use xsl:variable
when being used in <xsl:template match="legacyTemplate">
.
So what's the difference between xsl:param
and xsl:variable
when using it in <xsl:template name="myTemplate">
?
Upvotes: 39
Views: 38726
Reputation: 25153
The difference is that the value of an xsl:param
could be
set outside the context in which it is declared. For example,
see:
<xsl:template ...>
<xsl:param name="p" select="'x'" />
<xsl:variable name="v" select="'y'" />
...
then you know that $v
will always give you the string 'y'
. But for $p
the string 'x'
is only a default:
you will see a different value if the template is invoked with either
xsl:apply-templates
or xsl:call-template
which contains an instruction
such as:
<xsl:with-param name="p" select="'not x'" />
<xsl:param>
may also be used outside xsl:template
, at the top level in
the stylesheet. The value of such a parameter may be set when the
XSLT processor is called. How this is done depends on the processor
and whether you call it from the command line or by program.
Upvotes: 68