Paginación con XSLT y XML

25. July 2009 23:00 by Oscar.SS in XML  //  Tags:   //   Comments (0)

El motivo de este post es crear una forma de paginar el contenido de un archivo XML formateando los datos por medio de la tecnología XSLT.

En principio la idea es bien sencilla. Supongamos un archivo XML como el siguiente:

 

<?xml version="1.0" encoding="utf-8" ?>
<empleados>  
	<empleado id="1" nombre="Pedro" salario="45234€" />  
	<empleado id="2" nombre="Carlos" salario="45234€" />  
	<empleado id="3" nombre="Juan" salario="65362€" />  
	<empleado id="4" nombre="Antonio" salario="13134€" />  
	<empleado id="5" nombre="Manolo" salario="623462€" />  
	<empleado id="6" nombre="Aitor" salario="45234€" />
</empleados>
 

Lo que pretendemos es mostrar los elementos empleado del XML paginados de 2 en 2. En este caso tendremos un total de 3 páginas.

Podemos modificar el XML para que contenga un nodo raiz en el que guardaremos como atributos los datos necesarios para la páginación. Nuestro XML quedaría así:

 

<?xml version="1.0" encoding="utf-8" ?>
<pag posicionInicial="1" elementosPagina="2">
<empleados>  
	<empleado id="1" nombre="Pedro" salario="45234€" />  
	<empleado id="2" nombre="Carlos" salario="45234€" />  
	<empleado id="3" nombre="Juan" salario="65362€" />  
	<empleado id="4" nombre="Antonio" salario="13134€" />  
	<empleado id="5" nombre="Manolo" salario="623462€" />  
	<empleado id="6" nombre="Aitor" salario="45234€" />
</empleados>
</pag>
 

Lo mejor de esta técnica es que podemos añadir y modificar los atributos del nodo <pag> por medio de JavaScript mejorando la experiencia del usuario. Podemos cargar el XML entero en memoria y modificar los atributos ahorrando de este modo viajes innecesarios al servidor.

Ahora solo tendremos que recoger los valores de los atributos posicionInicial y elementosPagina en el código XSLT a modo de variables, tal y como se indica a continuación.

<xsl:variable name="start" select="pag/@posicionInicial" />
<
xsl:variable name="limint" select="pag/@elementosPagina" />
<
xsl:variable name="end" select="$start + $limint - 1" />
<
xsl:foreach select="pag/empleados/empleado[position() >= $start and position() <= $end]">          <xsl:sort select="@id" order="descending"/>

Aquí pondríamos todo el código HTML que fuera necesario.
</xsl:for-each>

 

Después de esto, por medio del evento onClick de una imagen o botón, tanto para avanzar como retroceder, llamaremos a una función JavaScript que se encarge en cada caso de aumentar (++) o disminuir (--) en 1 el valor del atributo XML posicionInicial.

Recent Comments

Comment RSS

Month List