Listado ordenado con XSLT
Este ejemplo viene a mostrarnos cómo ordenar una lista de datos que recuperamos mediante XSLT. Esto puede llegar a resultar útil ya que los elementos almacenados en el XML que contenga la información no tienen porque estar ordenados por el campo que nosotros queramos.
Lo primero que tenemos que hacer es definir el XML sobre el que vamos a recuperar la información. Utilizaremos la misma estructura de libros que utilizamos en el resto de los ejemplos:
<?xml version="1.0" encoding="iso-8859-1"?>
<libros>
<libro>
<titulo>Fuente Ovejuna</titulo>
<autor>Lope de Vega</autor>
<isbn>84-9815-002-7</isbn>
</libro>
<libro>
<titulo>La Celestina</titulo>
<autor>Fernando de Rojas</autor>
<isbn>84-96390-96-9</isbn>
</libro>
<libro>
<titulo>Don Juan Tenorio</titulo>
<autor>Jose Zorilla</autor>
<isbn>84-96390-97-7</isbn>
</libro>
</libros>
Para recuperar la información hay que recorrer los elementos que queremos mostrar. En nuestro caso mostraremos los libros y autores de los mismos. Esto lo podemos llevar a cabo con la etiqueta xsl:for-each, la cual, mediante el atributo select demarca el path del documento XML sobre el que queremos iterar. El path elegido será libros/libro.
En el caso de que queramos recuperar los valores de un elemento en concreto utilizamos la etiqueta xsl:value-of. En este etiqueta, al igual que en la etiqueta xsl:for-each, el atributo select nos indicará el elemento a recuperar.
Al final nos quedará un código como el que vemos:
<xsl:for-each select="libros/libro"> <p> Titulo:<xsl:value-of select="titulo"/><br/> Autor:<xsl:value-of select="autor"/> </p> </xsl:for-each>
Vemos que nuestro documento XSLT combina etiquetas de transformación (etiquetas del namespace xsl) y etiquetas XHTML que conformarán el documento definitivo, obtenido tras la transformación.
Si solo ponemos este código, nos saldrá la información, pero sin ordenar:
Mis Libros Titulo:Fuente Ovejuna Autor:Lope de Vega Titulo:La Celestina Autor:Fernando de Rojas Titulo:Don Juan Tenorio Autor:Jose Zorilla Titulo:Lazarillo de Tormes Autor:Anonimo Titulo:Fortunata y Jacinta Autor:Benito Perez Galdos Titulo:La Colmena Autor:Camilo Jose Cela
Para ordenar los elementos utilizamos la etiqueta xsl:sort. Esta etiqueta tiene un atributo select que indica el path sobre el que queremos ordenar. Así, si queremos ordenar por nombre del titulo pondríamos la siguiente línea de código:
<xsl:sort select="titulo"/>
Quedándonos el siguiente listado:
Mis Libros Titulo:Don Juan Tenorio Autor:Jose Zorilla Titulo:Fortunata y Jacinta Autor:Benito Perez Galdos Titulo:Fuente Ovejuna Autor:Lope de Vega Titulo:La Celestina Autor:Fernando de Rojas Titulo:La Colmena Autor:Camilo Jose Cela Titulo:Lazarillo de Tormes Autor:Anonimo
Hay que tener cuidado ya que la ordenación (xsl:sort) tiene que estar dentro de la iteración de elementos (xsl:for-each).