5 de media basado en 240 visitas.
Al escribir filtros XSLT es posible usar variables como en lenguajes tradicionales de programación, para simplificar el código y optimizar algunos procesos. Sin embargo hay algunas diferencias fundamentales que hay que tener en cuenta.
En XSLT, la sintaxis para asignar variables es
Donde por supuesto la “expresionXPath” corresponde al valor que se quiere asignar. De esta manera podemos usar la variable de las siguientes formas:Un punto muy importante a tomar en cuenta es donde existe la variable como tal. En este sentido, el alcance de la variable es el elemento que la contiene. Miremos la siguiente expresión:
A diferencia de lo que podría esperarse, el resultado obtenido seráLa variable vale:
Esto se debe a que el alcance de la variable es el elemento que la contiene, en este caso un <xsl:when>.Ante esto podríamos aplicar lógica de programación tradicional, definiendo la variable fuera del <xsl:choose> de modo de asegurarnos de aumentar su alcance haciéndola existir fuera del bloque.
El código quedaría de la siguiente manera:
Esto tampoco funciona, dado que pasa a funcionar otro elemento importante (y para algunos más que extraño) de XSLT: no se puede cambiar el valor de una variable. Donde definamos la variable, aparece como siendo creada nuevamente, con el scope dentro del <xsl:when>.
Para saltarnos esta limitante y efectivamente darle un valor a la variable dependiendo de alguna condición, podemos usar una sintaxis alternativa, en que en lugar de usar un select para la asignación, damos el valor dependiendo de los hijos de la etiqueta, como en el siguiente ejemplo:
La variable vale: <xsl:value-of select="$mi_variable">
Ahora si obtenemos
La variable vale: hola que tal
ó
La variable vale: festival
dependiendo de la condición. Sin embargo, como decíamos anteriormente, una vez que fue asignada la variable no puede ser modificada.
¡Echa un vistazo a esto!
Soy un apasionado del diseño gráfico y disfruto compartiendo mis conocimientos con todos aquellos que quieran conocer mi trabajo y afición.