jump to navigation

Filtrar información en una XSLT Noviembre 6, 2009

Publicado por lineadecodigo en : XSLT , trackback

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.  
  3.  
  4. Titulo:<xsl:value-of select="titulo"/><br/>
  5. Autor:<xsl:value-of select="autor"/><br/>
  6. Precio:<xsl:value-of select="precio"/>
  7.  
  8.  
  9. </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&gt;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.  
  4.  
  5. Titulo:<xsl:value-of select="titulo"/><br/>
  6. Autor:<xsl:value-of select="autor"/><br/>
  7. Precio:<xsl:value-of select="precio"/>
  8.  
  9.  
  10. </xsl:if>
  11. </xsl:for-each>

Articulos Similares:

|- Visualizar el ejemplo
|- Descargar el código
|- Reportar error en el código
|- Foro sobre XSLT

Enviar entrada por email Enviar entrada por email | Imprimir Imprimir | 601 visitas

1 Star2 Stars3 Stars4 Stars5 Stars (Todavia sin evaluar)
Loading ... Loading ...

Comentarios»

1. richard figuera - Noviembre 8, 2009

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)]




Si tienes dudas sobre XSLT no dudes en visitar el Foro sobre XSLT.
Imagen CAPTCHA CAPTCHA Audio
Refrescar imagen