Proměnné slouží v XSLT k zapamatování údajů, které opakovaně používáme. Jednotlivé údaje pak nemusíme opakovaně zjišťovat a ušetří se tak čas.
Parametry jsou speciálním druhem proměnných, které mají implicitní hodnotu, kterou lze při volání stylu nebo šablony změnit.
Na rozdíl od jiných jazyků, nelze v XSLT měnit obsah již definované proměnné. Proměnnou lze nastavit buď globální pro celý styl, nebo jen pro určitou šablonu či její část. Proměnné definované v šabloně přitom zastíní globální proměnné stejného jména.
Proměnná je platná pro všechny své následující sourozence a jejich potomky.
Proměnná může obsahovat libovolný XPath typ (seznam uzlů, řetězec, číslo, boolean) a kus výstupního dokumentu.
Proměnnou můžeme definovat jedním z následujících tří způsobů:
<!-- Přiřazení výsledku libovolného výrazu do proměnné --> <xsl:variable name="jméno
" select="výraz
"/> <!-- Přiřazení prázdného řetězce do proměnné --> <xsl:variable name="jméno
"/> <!-- Přiřazení fragmentu výstupního dokumentu do proměnné --> <xsl:variable name="jméno
">elementy, atributy apod.
</xsl:variable>
Na obsah proměnné se pak ve výrazech můžeme odvolávat pomocí
zápisu $
.jméno
Pokud chceme hodnotu proměnné zkopírovat do výstupního dokumentu, můžeme použít:
<xsl:value-of select="$jméno
"/>
Takovýto zápis převede obsah proměnné vždy na textový řetězec, i když proměnná obsahuje kus výstupního dokumentu včetně elementů. Pokud potřebujeme kopírovat i strukturu, použijeme jinou instrukci:
<xsl:copy-of select="$jméno
"/>
Rozdíl mezi chováním <xsl:value-of>
a <xsl:copy-of>
ilustruje následující
příklad.
Příklad 5.1. Kopírování proměnné do výstupu – promenna.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:variable name="a"> <para>Odstavec 1</para> <para>Odstavec 2</para> </xsl:variable> <xsl:value-of select="$a"/> --- <xsl:copy-of select="$a"/> </xsl:template> </xsl:stylesheet>
Tento styl vygeneruje následující výstup:
Odstavec 1Odstavec 2 --- <para>Odstavec 1</para><para>Odstavec 2</para>