Used to define a formal parameter to a template, or to the stylesheet.

Category: declaration
Content: sequence-constructor
Permitted parent elements: xsl:stylesheet ; xsl:transform ; xsl:override ; xsl:function ; xsl:template




The name of the parameter.



The default value of the parameter may be defined either by a select attribute, or by the contents of the xsl:param element, in the same way as for xsl:variable. The default value is ignored if an actual parameter is supplied with the same name.



Defines the type of the parameter. The actual supplied parameter will be converted to this type if required. If the parameter is omitted, the default value must conform to the type. Note that if no default is specified, the default is a zero-length string, which may conflict with the required type.



Not allowed for function parameters, which are always required. If the parameter is required, no default value may be specified. Failure to supply a value for a required parameter gives a run-time error (the specification says that in the case of xsl:call-template, it should be a static error).






"public" | "private" | "final" | "abstract"

Determines the potential visibility of the component corresponding to this parameter (the default is private).

Notes on the Saxon implementation

XSLT 3.0 introduces static parameters (global parameters declared with static="yes"). These are implemented since Saxon 9.5. The value of a static parameter must be known at stylesheet compile time. Static parameters can be referenced in [xsl:]use-when attributes, and also in the initializers of other static parameters and variables. The scope rules are a little different from other global variables and parameters - forwards references are not allowed. The values of static parameters may be supplied from the command line in the same way as dynamic parameters; they may also be supplied via a new method call on the s9api XsltCompiler object.

In standard XSLT, the value of a global variable cannot be updated once it has been declared using xsl:param. Saxon however provides a saxon:assign extension element to circumvent this restriction. The extension attribute saxon:assignable must be set to yes on the relevant xsl:param in order to use this feature.

The type-information attribute was removed at Saxon 7.5.


As a template parameter, xsl:param must be used as an immediate child of the xsl:template element. As a stylesheet parameter, it must be used as an immediate child of the xsl:stylesheet element.

In XSLT 3.0, xsl:param can also appear as a child of xsl:iterate.

Links to W3C specifications

XSLT 2.0 Specification

XSLT 3.0 Specification

See also