Comme vous pouvez le voir dans les commentaires du code, ces drivers m'ont donné plus de mal que les autres, mais l'abstraction marche nickel et je passe allégrement de l'un à l'autre avec la même syntaxe (D'un autre côté c'est un peu le but :-)).

Si mon fichier XML était plus gros je pourrais même benchmarker et faire des tests domXML vs xsltProc...

Pour pouvoir utiliser xsltProc, vous devez avoir accès à /usr/bin/xsltproc.

<?
/*---------------------------------------------------
* 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 xsltProc.
* @package PhotoLib
* @version $Id
*/


class xsltProcessor {
   
    /*
     * Variable de la classe.
     */

    var $XML_file;        // Document XML
    var $XSL_file;        // Document XSL
    var $html;
    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.
     * @param (String) Chemin vers xsltProc (Facultatif, par défaut :
     * /usr/bin/xsltproc).
     */

    function xsltProcessor( $XML_file, $XSL_file, $xsltProcPath = '/usr/bin/xsltproc'){
       
        $this->XML_file         = $XML_file;
        $this->XSL_file             = $XSL_file;
        $this->xsltProcPath        = $xsltProcPath;
        $this->cpt                = 0;                                                    // Initialisation du compteur.
    }
   
   
    /**
     * Gère la transformation du document XML.
     * @param (array) Paramètre à passer au document XSL. Ce dernier peut être
     * null.
     */

    function transform( $param = null ){
               
        $paramString = " ";                                                        // Paramètres sous la forme d'un String.
       
        // Transformation avec passage de paramètres :
        if ( $param != null )
            {
                // On mets les paramètres sous la bonne forme (--param key 'value')
                foreach ( $param as $key => $value )
                    { $paramString .= "--param $key \"'$value'\" "; }
            }
        // La syntaxe xsltProc est un peu plus agressive :).
        $xslt     = $this->xsltProcPath.$paramString.$this->XSL_file.' '.$this->XML_file.' 2>&amp;1';
        exec($xslt, $this->html);
        $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(){
       
        $output = implode (" ", $this->html);
        /*
         * Alors là on nage dans le paranormal digne de X-Files... Il est 2H du mat' et
         * je me rend compte que la remis à 0 de $html est indispensable...
         * Elle influe sur le dernier index de $param et uniquement pour action = content...
         * A n'y rien comprendre...
         */

        $this->html = null;
        return $output;
    }
   
   
    /**
     * 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 'xsltProc';
     }
   
   
}    // Fin.


?>