Nuestras hojas de transformación no se tienen que limitar a recuperar toda la información de un fichero XML y a ponerla en otro tipo de formato. Puede ser que cierta información del documento no nos interese, o tenga que ser evaluada. Es por ello que puede darse el caso de que necesitemos filtrar información en una XSLT.
Para poder realizar esa evaluación de datos nos podemos apoyar en estructuras condicionales como xsl:if, xsl:choose y las funciones que tiene el lenguaje XSL.
Siguiendo al resto de los ejemplos XSLT de nuestra web, vamos a utilizar el fichero XML con los datos de los libros. Pero en este caso vamos a añadir un nuevo campo en la estructura. Este nuevo campo será el precio del libro. El fichero de libros nos quedará así:
Fuente Ovejuna
Lope de Vega
84-9815-002-7
24
La Celestina
Fernando de Rojas
84-96390-96-9
32
...
La condición de nuestra hoja de transformación será el generar un listado de libros, pero siempre y cuando, estos, tengan un precio superior o igual a 30 euros.
Para ello lo primero que tenemos que hacer es mostrar el listado de libros. Esto lo conseguimos con una estructura repetitiva del tipo xsl:for-each. En medio de esta estructura, utilizando etiquetas xsl:value-of mostramos la información del titulo del libro, autor y precio del mismo. Tendremos el siguiente código:
Titulo:
Autor:
Precio:
El código anterior nos va a sacar todos los libros que tengamos definidos en nuestra estructura XML. Todavía no hemos ejecutado el filtro. Para aplicar el filtro utilizamos la etiqueta xsl:if. Antes de utilizarla refrescaremos cual es su estructura
...
Como podemos ver, el atributo test es el que nos permite evaluar la condición. Como condición podemos utilizar cualquiera de las funciones que nos da el lenguaje XSLT o simplemente comparar valores de elementos del documento XML contra constantes. Este último caso será el nuestro. Y es que nosotros contrastaremos el valor de un elemento del documento, el precio, contra una constante, 24 (euros € o dolares $ ;-)) Quedándonos al final esta línea de código:
...
En el medio de esta decisión pondremos la extracción de información del libro, es decir, los xsl:value-of. Nuevamente, quedándonos:
Titulo:
Autor:
Precio: