Faire des transformations xslt avec perl

Pour mettre en forme un document XML et le présenter sur le web en tant que document html, le plus simple à mon sens est d'utiliser XSLT.

Il faut ensuite faire appel à un moteur XSL pour faire les transformations. Ma préférence va à la Libxslt qui est une implémentation en C de XSLT 1.0. J'utilise ensuite une interface en perl de la librairie Lixslt à travers le module XML::LibXSLT.

Imaginons le fichier XML suivant:

<?xml version="1.0" encoding="iso-8859-1"?>
<articles>
<article>
<titre>Faire des transformations XSLT en perl.</titre>
<entete>perl est le couteau suisse du programmeur. On peut tout faire avec. Cet article va vous présenter le module XML::LibXSLT</entete>
<date>2007-12-26T17:56:17+00:00</date>
</article>
<article>
<titre>PHP6, c'est pour bientôt.</titre>
<entete>Alors que la version 5 de php n'est pas encore définitivement adopté par la communauté, la version 6 pointe le bout de son nez!</entete>
<date>2008-01-09T07:20:26+00:00</date>
</article>
<article>
<titre>Des exceptions en perl</titre>
<entete>Comment gérer les exceptions en perl ?</entete>
<date>2008-02-13T16:01:03+00:00</date>
</article>
</articles>

En utilisant la feuille de style xslt suivante:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="1.0" indent="yes" encoding="utf-8" omit-xml-declaration="no"/>

<xsl:template match="/articles">
<h1>Les derniers articles publiés</h1>
<xsl:apply-templates select="article"/>
</xsl:template>

<xsl:template match="article">
<div class="article">
<h2><xsl:value-of select="titre"/></h2>
<span class="date"><xsl:value-of select="date"/></span>
<p><xsl:value-of select="entete"></xsl:value-of></p>
</div>
</xsl:template>
</xsl:stylesheet>

On souhaite obtenir le résultat suivant:

<h1>Les derniers articles publiés</h1>
<div class="article">
<h2>Faire des transformations XSLT en perl.</h2>
<span class="date">2007-12-26T17:56:17+00:00</span>
<p>perl est le couteau suisse du programmeur. 
On peut tout faire avec. Cet article va vous présenter le module XML::LibXSLT</p>
</div>
<div class="article">
<h2>PHP6, c'est pour bientôt.</h2>
<span class="date">2008-01-09T07:20:26+00:00</span>
<p>Alors que la version 5 de php n'est pas encore définitivement adoptée
 par la communauté, la version 6 pointe le bout de son nez!</p>
</div>
<div class="article">
<h2>Des exceptions en perl</h2>
<span class="date">2008-02-13T16:01:03+00:00</span>
<p>Comment gérer les exceptions en perl ?</p>
</div>

Le code qui permet de faire cela n'est pas bien complexe:

#!/usr/bin/perl -w

use warnings;
use strict;
use XML::LibXML;
use XML::LibXSLT;

my $parser = XML::LibXML->new();
my $xslt = XML::LibXSLT->new();
$xslt->max_depth(2000);
my $source = $parser->parse_file('source.xml');
my $style_doc = $parser->parse_file('source.xsl');
my $stylesheet = $xslt->parse_stylesheet($style_doc);
my $result = $stylesheet->transform($source);
print $stylesheet->output_string($result);

Rien de bien compliqué, en fait.

Note:
Si quelqu'un connait un moyen simple de colorer le code, je suis ouvert à toutes propositions. Merci d'avance.

Haut de page