Après avoir testé pas mal de processeur XSLT, mon choix c’est arrêté sur DomXML qui malgré son stade toujours expérimental, n’en demeure pas moi très bon et surtout très répandu (Le principal critère de sélection en fait).
Mise en garde issue de php.net :
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez ce module à vos risques et périls.
Précédemment nous avions évoqué le principe de l’abstraction du processeur XSLT, je vous livre donc le code de mon driver pour DomXML.
<?
/*---------------------------------------------------
* PhotoLib 1.0
* PhotoLib, la Galerie web.
* --------------------------------------------------
* Par Guillaume Kulakowski
* Développée pour la Licence Professionnelle.
* --------------------------------------------------*/
/**
* couche d'abstraction gérant la gestion du processeur XSLT Domxml.
* @package PhotoLib
* @version $Id
*/
class xsltProcessor {
/*
* Variables de la classe.
*/
var $xml; // dom.
var $xsl; // domxsltStylesheet.
var $html; // domDocument.
var $cpt; // Compteur de transformation.
/**
* Constructeur de la classe xsltProcessor. C'est le constructeur qui va
* récupérer et charger les documents XML et XSL.
* @param (String) Document XML.
* @param (String) Document XSL.
*/
function xsltProcessor( $XML_file, $XSL_file ){
$this->xslt = domxml_xslt_stylesheet_file($XSL_file); // Chargement de la feuille XSL.
$this->xml = domxml_open_file($XML_file); // Chargement de la feuille XML.
$this->cpt = 0; // Compteur de transformation à 0.
}
/**
* Gère la transformation du document XML.
* @param (array) Paramètre à passer au document XSL. Ce dernier peut être
* null.
*/
function transform( $param = null ){
// Transformation avec passage de paramètre :
if ( $param != null )
{ $this->html = $this->xslt->process($this->xml, $param); }
// Transformation sans paramètre :
else
{ $this->html = $this->xslt->process($this->xml); }
$this->cpt++;
}
/**
* A partir d'un domDocument généré par transform(), retourne le code html
* de ce domDocument.
* @return (String) Code html.
*/
function output(){
return $this->html->html_dump_mem();
}
/**
* Compte le nombre de transformation XSLT effectuées.
* @return (int) Nombre de transformation XSLT
*/
function xsltCount(){
return $this->cpt;
}
/**
* Compte le nom du processeur XSLT.
* @return (String) Nom du processeur XSLT.
*/
function xsltName(){
return '<a href="http://php.net/domxml" target="_blank">DomXML</a>';
}
} // Fin.
?>