Saltar al contenido principal

variable

El elemento variable permite definir y declarar variables.

Las variables en XSLT se utilizan para almacenar valores que se pueden reutilizar en diferentes partes de una transformación, lo que hace que el código sea más modular y fácil de mantener. Se pueden asignar valores estáticos o dinámicos utilizando expresiones XPath.

La estructura de este elemento es la siguiente:

<xsl:variable name="nombre" select="expresion">
<!-- template (opcional) -->
</xsl:variable>

Donde:

  • name es un atributo obligatorio que permite especificar el nombre de la variable.
  • select es un atributo opcional que permite definir el valor que tendrá la variable.

Un ejemplo de definición de una variable sería el siguiente:

<xsl:variable name="cabecera">
<tr>
<th>Elemento</th>
<th>Descripción</th>
</tr>
</xsl:variable>

Para hacer uso de la variable, utilizamos el nombre definido en el atributo name (en este caso, cabecera) precedido de $.

<xsl:copy-of select="$cabecera" />

Esto producirá como resultado la siguiente salida:

<tr>
<th>Elemento</th>
<th>Descripción</th>
</tr>

Tipos de variables

Existen dos tipos de variables:

  • Variable global: es declarada como un elemento de nivel superior
  • Variable local: es declarada dentro de un elemento template.

Una vez declarado el valor de una variable, no podrá ser modificado. Es decir, aunque se denomine variable, su comportamiento es como el de una constante.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="color1" select="'rojo'" /> <!-- global -->

<xsl:template match="/">
<xsl:variable name="color2" select='"verde"' /> <!-- local -->
</xsl:template>

</xsl:stylesheet>

Atributro select con una cadena de texto

Si el atributo select contiene una cadena de texto (string):

  • El elemento variable no puede tener contenido.
  • El valor de la variable debe ir entre comillas.

A continuación, se muestran dos formas distintas de asignar el valor rojo a la variable color:

<xsl:variable name="color" select="'rojo'"/>
<xsl:variable name="color" select='"rojo"'/>

Un ejemplo de su uso sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="color1" select="'rojo'" />
<xsl:variable name="color2" select='"verde"' />

<xsl:template match="/">
<html>
<body>
<ul>
<li><xsl:copy-of select="$color1"/></li>
<li><xsl:copy-of select="$color2"/></li>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Consideremos que tenemos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo></catalogo>

En ese caso, la transformación XSLT daría como resultado un documento HTML:

<!DOCTYPE html>
<html>
<body>
<ul>
<li>rojo</li>
<li>verde</li>
</ul>
</body>
</html>

El documento HTML se visualizaría de la siguiente manera:

Probar en el navegador

Omisión de contenido y del atributo select

Si el elemento variable es un elemento vacío (no tiene contenido) y solo contiene el atributo name, el valor de la variable será la de una cadena de texto vacía.

El siguiente ejemplo cumple con lo descrito:

<xsl:variable name="color" />

El código anterior sería equivalente al siguiente:

<xsl:variable name="color" select="''"/>

Un ejemplo de su uso sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="color1" select="''" />
<xsl:variable name="color2"/>

<xsl:template match="/">
<html>
<body>
<ul>
<li><xsl:copy-of select="$color1"/></li>
<li><xsl:copy-of select="$color2"/></li>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Consideremos que tenemos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo></catalogo>

En ese caso, la transformación XSLT daría como resultado un documento HTML:

<!DOCTYPE html>
<html>
<body>
<ul>
<li></li>
<li></li>
</ul>
</body>
</html>

El documento HTML se visualizaría de la siguiente manera:

Probar en el navegador