# xsl:variable

The `xsl:variable` element is used to declare a variable and give it a value. If it appears at the top level (immediately within xsl:stylesheet) it declares a global variable, otherwise it declares a local variable that is visible only within the stylesheet element containing the xsl:variable declaration.

The mandatory `name` attribute defines the name of the variable.

The value of the variable may be defined either by an expression within the optional `select` attribute, or by the contents of the xsl:variable element. In the latter case the result is a temporary tree. A temporary tree can be used like a source document, for example it can be accessed using path expressions and processed using template rules.

There is an optional attribute, `as`, to define the type of the variable. The actual supplied value must be an instance of this type; it will not be converted. This has changed in Saxon 7.4: previous releases did a conversion.

In standard XSLT, variables once declared cannot be updated. Saxon however provides a saxon:assign extension element to circumvent this restriction.

The value of a variable can be referenced within an expression using the syntax `$name`.

Example:

    <xsl:variable name="title">A really exciting document"</xsl:variable>
    <xsl:variable name="backcolor" expr="'#FFFFCC'" />
    <xsl:template match="/*">
        <HTML><TITLE<xsl:value-of select="$title"/></TITLE>
        <BODY BGCOLOR='{$backcolor}'>
        ...

        </BODY></HTML>
    </xsl:template>

Next