Ordenando un fichero XML
Cada día tratamos más fuentes de información basadas en XML. Ficheros que intercambiamos, bases de datos basadas en XML o simplemente registros que contienen información variopinta. Podemos apoyarnos en XSLT para dejar ordenado un fichero XML. Y al igual que cuando tratamos una base de datos, podemos dejarle ordenado por el campo que nosotros queramos.
Documento XML que vamos a ordenar
Sección titulada «Documento XML que vamos a ordenar»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:
<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>Recorrer los elementos y mostrarlos
Sección titulada «Recorrer los elementos y mostrarlos»En primer lugar vamos a 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"></xsl:value-of><br></br>Autor:<xsl:value-of select="autor"></xsl:value-of></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 OvejunaAutor:Lope de Vega
Titulo:La CelestinaAutor:Fernando de Rojas
Titulo:Don Juan TenorioAutor:Jose Zorilla
Titulo:Lazarillo de TormesAutor:Anonimo
Titulo:Fortunata y JacintaAutor:Benito Perez Galdos
Titulo:La ColmenaAutor:Camilo Jose CelaUtilizar xsl:sort para ordenar el fichero XML
Sección titulada «Utilizar xsl:sort para ordenar el fichero XML»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"></xsl:sort>Quedándonos el siguiente listado:
Mis Libros
Titulo:Don Juan TenorioAutor:Jose Zorilla
Titulo:Fortunata y JacintaAutor:Benito Perez Galdos
Titulo:Fuente OvejunaAutor:Lope de Vega
Titulo:La CelestinaAutor:Fernando de Rojas
Titulo:La ColmenaAutor:Camilo Jose Cela
Titulo:Lazarillo de TormesAutor:AnonimoHay que tener cuidado ya que la ordenación (xsl:sort) tiene que estar dentro de la iteración de elementos (xsl:for-each).
Descarga el código de Ordenando un fichero XML
Artículo que explica cómo ordenar un fichero XML utilizando XSLT y la etiqueta xsl:sort para organizar libros.