Llamamos XSLT al procedimiento de transformación de ficheros XML al que se le aplica un fichero XSL con el fin de conseguir un resultado concreto, ya sea un HTML, otro XML o cualquier otro formato en el que deseemos mostrar la salida.
Este sistema es bastánte rápido ya que se ejecuta en el servidor y se realiza completamente en memoria, en PHP 5 el sistema para transformar XML está bastante extendido y yo he usado las propiedades DOMDocument para recorrer el fichero y aplicarle el XSL.
<?php
// Load the XML source
$xml = new DOMDocument;
$xml->load('midocumento.xml');
$xsl = new DOMDocument;
$xsl->load('miplantilla.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
echo $proc->transformToXML($xml);
?>
En este ejemplo vemos como cargamos el fichero midocument.xml
como un fichero XML y por otro lado la plantilla miplantilla.xsl
como el fichero XSL, para luego pasarlos por el XSLProcessor al que le importamos nuestra XSL y aplicamos el cambio, mostrando la transformación mediante echo
.
De esta forma no nos es muy complicado convertir cualquier XML a cualquier otro formato (HTML, XML, SVG,…)
Aprovechando estas pruebas, he mejorado Twitter TimeLine usando este sistema para parsear el XML, consiguiendo una mejora de velocidad superior a la mitad con respecto al anterior.
Fichero XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" media-type="application/xml" encoding="UTF-8"/>
<xsl:template match="/">
<data>
<xsl:for-each select="/statuses/status">
<event start="{created_at}"
title="{user/name}"
image="{user/profile_image_url}"><xsl:value-of select="text" /></event>
</xsl:for-each>
</data>
</xsl:template>
</xsl:stylesheet>
Para esto no necesitaba un XSL gigante ya que los datos que devuelve Twitter no son excesivos y están bastánte bien estructurados. De esta forma estoy convirtiendo el XML que me responde Twitter a un XML que necesita Simile TimeLine.
Podeis verlo funcionando aqui y descargarlo de aqui
Configuración
define ("_USER","TWITTER USERNAME"); // Nombre de usuario o mail de Twitter
define ("_PASS","TWITTER PASSWORD"); // Password de twitter
define ("_FILE","twitter.xml"); // Fichero donde se almacenarán los datos
define ("_CACHE_TIME","300"); // Tiempo (en segundos) de vida del fichero de datos antes de volver a cargarlos.
6 comentarios, 2 referencias
+
#