Aventure XML – Part3 (Drivers xsltProc)

Guillaume Kulakowski par Guillaume Kulakowski dans php 1 février 2005 0
Tags : PHP XML XSL XSLT
php

Nous avons vu précédemment les concepts d’abstraction de SGBD, d’abstraction de processeur XSLT et je vous ai livré le code de mes drivers pour processeur domXML… Ce coup si c’est le code de mes drivers xsltProc que je vous livre.

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.


?>

Commentaires

Les commentaires pour ce poste sont fermés.