Filtrar información en una XSLT

06/Nov/2009 XSLT , , , , 1 Comentario

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í:

  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <libros>
  3. <libro>
  4. <titulo>Fuente Ovejuna</titulo>
  5. <autor>Lope de Vega</autor>
  6. <isbn>84-9815-002-7</isbn>
  7. <precio>24</precio>
  8. </libro>
  9. <libro>
  10. <titulo>La Celestina</titulo>
  11. <autor>Fernando de Rojas</autor>
  12. <isbn>84-96390-96-9</isbn>
  13. <precio>32</precio>
  14. </libro>
  15. ...
  16. </libros>

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:

  1. <xsl:for-each select="libros/libro">
  2. <p>
  3. Titulo:<xsl:value-of select="titulo"/><br/>
  4. Autor:<xsl:value-of select="autor"/><br/>
  5. Precio:<xsl:value-of select="precio"/>
  6. </p>
  7. </xsl:for-each>

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

  1. <xsl:if test="condicion"> ... </xsl:if>

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:

  1. <xsl:if test="precio>24"> ... </xsl:if>

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:

  1. <xsl:for-each select="libros/libro">
  2. <xsl:if test="precio>=30">
  3. <p>
  4. Titulo:<xsl:value-of select="titulo"/><br/>
  5. Autor:<xsl:value-of select="autor"/><br/>
  6. Precio:<xsl:value-of select="precio"/>
  7. </p>
  8. </xsl:if>
  9. </xsl:for-each>

Un comentario en “Filtrar información en una XSLT”

Víctor Cuervo

richard figuera

necesito un programa en java que haga analisis para comprender el objeto punto defina una constante llamada origen que representeel origen de coordenadas escriba un programa de nombre prueba punto que deetrmine la distancia de un punto de origen ejemplo
mactc.sqr[(x2-x1)(x2-x1)+(y2-y1)(y2-y1)]

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*