Cargar un combo con XSLT

08/Sep/2009 XSLT , , , , , ,

La pretensión de este ejemplo es ver como podemos cargar un combo (desplegable) mediante una hoja XSLT. Es decir, utilizar los datos de un XML para que aparezcan como opciones de un combo.

Para ello partimos de nuestro XML de ejemplo de siempre. Nuestros autores. La verdad es que debería de pensar en sacarlo a una página aparte, ya que solo hago que hacer "copy & paste". Pero veamos como es el XML de autores:

  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. </libro>
  8. <libro>
  9. <titulo>La Celestina</titulo>
  10. <autor>Fernando de Rojas</autor>
  11. <isbn>84-96390-96-9</isbn>
  12. </libro>
  13. <libro>
  14. <titulo>Don Juan Tenorio</titulo>
  15. <autor>Jose Zorilla</autor>
  16. <isbn>84-96390-97-7</isbn>
  17. </libro>
  18. </libros>

En nuestro ejemplo vamos a cargar un combo con los títulos de los libros que están dentro del XML. A si que pongámonos manos a la obra con nuestra hoja de transformación.

Hay que recordar que las hojas de transformación son documentos XML. A si que lo primero que veremos en el será la cabecera que lo identifique XML y la definición del namespace de XSL.

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.  
  3. <xsl:stylesheet version="1.0"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Esto era obvio, pero por si acaso había algún despistado, había que recordarlo.

Pero vayamos al meollo. Para conseguir la carga del combo tenemos que definir una plantilla. Dicha plantilla lo que tendrá que hacer es recorrer los elementos libro e ir generando las etiquetas que son las que representan el contenido del combo. Para iterar sobre los elementos utilizamos la etiqueta xsl:for-each.

En dicha etiqueta tenemos que establecer como atributo de iteración, select, el conjunto de etiquetas sobre las que queremos iterar. En nuestro caso libros/libro. Y en cada iteración obtener el valor del atributo. Para esto utilizaremos la etiqueta xsl:value-of, que al igual que la anterior tiene un atributo select, que en este caso indica la etiqueta de la cual se quiere recuperar el valor.

Al final nos queda algo así:

  1. <xsl:for-each select="libros/libro">
  2. <option><xsl:value-of select="titulo"/></option>
  3. </xsl:for-each>

Ya que al final, lo que vamos es buscando que la hoja de transformación suelte un código HTML como el siguiente:

  1. <option>Fuente Ovejuna</option>
  2. <option>La Celestina</option>
  3. <option>Don Juan Tenorio</option>
  4. </select>

A si que como has podido comprobar, dentro de la hoja de transformación entre el código anterior tendremos que añadir la etiqueta SELECT. Quedándonos la hoja de transformación como sigue:

  1. <select>
  2. <xsl:for-each select="libros/libro">
  3. <option><xsl:value-of select="titulo"/></option>
  4. </xsl:for-each>
  5. </select>

Y poco más. Solo recordar que el documento XML tiene que tener una referencia a la hoja de transformación que lo va a usar:

  1. <?xml-stylesheet type="text/xsl" href="combo.xsl"?>

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D