# xsl:with-param

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.

Next