The xsl:with-param element is used to define an actual parameter to a template. It may be used within an xsl:call-template or an xsl:apply-templates or an xsl:apply-imports element. For an example, see the xsl:template section.

There is a mandatory attribute, name, to define the name of the parameter. The 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 parameter has no effect unless the called template includes a matching xsl:param element. But when using xsl:call-template, it is an error to specify a parameter that isn't declared in the target template, or to omit a parameter that's described in the target template with required="yes".

The attribute tunnel="yes" creates a tunnel parameter which is accessible to called templates at any depth, whether or not they are declared in intermediate templates. However, the value is only accessible if tunnel="yes" is also specified on the corresponding xsl:param element.

In XSLT 3.0, xsl:with-param can also appear as a child of xsl:evaluate, to define variables available for use within the dynamically-evaluated XPath expression, and as a child of xsl:next-iteration, to define values of iteration parameters to be used on the next iteration.