Tutoriel Création de pages Web avec XML et XSLT
La transformation XSLT avec PHP
Réalisé par Nabil ADOUI, membre de l’équipe support technique 4D
Sommaire
:
Dans la présente note technique, nous allons vous présenter l’extension XSL(PHP) qui permet de réaliser des transformations XSLT. Cette extension va remplacer les trois commandes 4D XSLT APPLIQUER TRANSFORMATION, XSLT FIXER PARAMETRE et XSLT LIRE ERREUR.
La transformation XSLT est une norme définie par W3C. Ce langage transforme un fichier XML vers un autre document de type XML, HTML ou n’importe quel autre type reconnu par le navigateur pour donner une présentation visuelle plus significative au document original.
La transformation XSLT prend en entrée deux éléments :
• Un document XML qu’on veut transformer
• Une feuille de style XSL (XML style sheets). C’est un fichier XML décrivant la présentation du contenu de notre document. Il doit être déclaré de la façon suivante :
"1.0" "UTF-8"
xmlns:xsl=" m" version="1.0">
Ces deux fichiers seront utilisés par un processeur XSLT basé sur la bibliothèque PHP XSLT qui va remplacer le processeur C++ XALAN utilisé par 4D actuellement.
Le résultat est un document XML qui inclut le contenu du document original représenté selon la feuille de style indiquée.
PHP XSL est une implémentation de la norme XSLT qui utilise la bibliothèque libxslt (XSLT C library for GNOME).
Elle contient une seule classe XSLTProcessor avec une dizaine de méthodes figurant ci-dessous :
XSLTProcessor — La classe XSLTProcessor |
• XSLTProcessor::__construct — Créer un nouveau objet XSLTProcessor • XSLTProcessor::getParameter — Retourner la valeur du parametre • XsltProcessor::getSecurityPrefs — Retourner les préférences de sécurité • XSLTProcessor::hasExsltSupport — Déterminer si PHP supporte XSLT • XSLTProcessor::importStylesheet — Importer des feuille de style • XSLTProcessor::registerPHPFunctions — Permettre d'utiliser les fonctions de PHP comme des fonctions de XSLT • XSLTProcessor::removeParameter — Supprimer parametre • XSLTProcessor::setParameter — Fixer la valeur d'un parametre • XSLTProcessor::setProfiling — Fixer un fichier de sortie pour un profile • XsltProcessor::setSecurityPrefs — Fixer les parametres de sécurité • XSLTProcessor::transformToDoc — Transformer à un document DOM • XSLTProcessor::transformToUri — Transformer à un URI • XSLTProcessor::transformToXML — Transformer à un XML |
Dans la suite de cette note technique, nous allons nous concentrer sur 5 méthodes seulement :
• XSLTProcessor::__construct
• XSLTProcessor::setParameter
• XSLTProcessor::importStylesheet
• XSLTProcessor::transformToXML
• XSLTProcessor::transformToURI
Cette méthode est tout simplement le constructeur de la classe XSLTProcessor.
Elle permet de créer un nouveau objet de type XSLTProcess.
Elle n’accepte aucun paramètre et ne retourne aucune valeur.
• Signature :
XSLTProcessor::__construct ( void)
• Exemple d’appel : $xsl = new XSLTProcessor;
Cette méthode stocke un ou plusieurs paramètres à utiliser dans les transformations qui suivent.
Vous pouvez appeler ce paramètre dans votre fichier XSL à l’aide du symbole « $ » suivi par le nom du paramètre.
• Signatures : bool XSLTProcessor::setParameter ( string $namespace , string $nom , string $valeur )
bool XSLTProcessor::setParameter ( string $namespace , array $options )
Ø $namespace : URI de l’espace de nom du paramètre XSLT,
Ø $nom : le nom local du paramètre XSLT
Ø $valeur : La nouvelle valeur du paramètre XSLT
Ø $options : Un tableau de paires nom => valeur
• Exemple d’appel :
$xsl = new XSLTProcessor();
$xsl->setParameter('', 'param1','valeur1');
On peut aussi passer un tableau de paramètres :
$params['param1'] = 'valeur1' ; $params['param2'] = 'valeur2' ; $xsl->etParameter('', $params);
Cette méthode importe la feuille de style représentée par le fichier XSL qu’on veut appliquer durant la transformation.
• Signature : void XSLTProcessor::importStylesheet ( object $stylesheet )
• Exemple :
$xsl = new DOMDocument;
$xsl->load('');
$proc = new XSLTProcessor; $proc->importStyleSheet($xsl);
TransformToXML convertit le document source vers un texte en appliquant le fichier XSL importé utilisant la méthode importStylesheet.
• Signature : string XSLTProcessor::transformToXML ( DOMDocument$doc )
Cette méthode transforme le document source vers un fichier qui sera stocké vers l’URI spécifié comme paramètre de la méthode, après l’application de la feuille de style choisie.
• Signature :
int XSLTProcessor::transformToURI ( DOMDocument$doc , string $uri )
Nous allons prendre comme exemple, le document XML suivant qui contient des titres de chansons et leurs artistes et les années de sortie :
Empire Burlesque Bob Dylan 1985 Hide your heart Bonnie Tyler 1988 Greatest Hits Dolly Parton 1982 Still got the blues Gary Moore 1990 Eros Eros Ramazzotti 1997 One night only Bee Gees 1998 Sylvias Mother 1973 Maggie May Rod Stewart 1990 Romanza Andrea Bocelli 1996 |
Puis nous allons appliquer une transformation XSL avec PHP XSL selon la feuille de style suivante :
"#9acd32"> "catalog/cd"><<xsl:choosexsl:when="annee > $param1"="red">select="titre" />"red">"artiste" />"titre" />"artiste" />
<xsl:stylesheetversion="1.0" xmlns:xsl="method="html"version="4.0""> "UTF-8" indent="yes"/>encoding <xsl:templatematch="/"> Ma collection"1"> |
|
titre | artiste |
---|
>
Cette feuille de style va regrouper les données du fichier XML dans un tableau à deux colonnes.
Pour rendre la tâche plus intéressante, nous allons colorer les lignes qui ont une année supérieure à un paramètre ($param1) que nous allons fournir au niveau de notre code PHP.
Voici alors notre code PHP :
Nous supposons dans cet exemple que les fichiers XML et XSL se trouvent dans le même répertoire que le fichier source PHP, sinon il faut fournir le chemin complet.
Au niveau de 4D, nous allons exécuter ce code PHP avec les commandes suivantes :
$filePath:=Dossier 4D(Dossier Resources courant)+""
$isOK:=PHP Executer($filePath;"";$res)
PHP LIRE REPONSE
COMPLETE(stdOut;libellesErr;valeursErr;chpsEnteteHttp;valeursEnteteHttp)
Si ($isok) vHtml:=$res
Fin de si
Le résultat de la transformation sera alors stocké dans la variable vHtml.
Après l’exécution de cette méthode 4D, vHtml va contenir le code HTML suivant :
"">\n\n
Ma collection
\n
border="1">\n\n\n\n\n\nBurlesque\nBob Dylan\n\n\n\nTyler\n\n\n\n\n\n\nthe blues\nGary Moore\n\n\n\n\n\n\n\n\n\n\nMother\n\n\n\n\nStewart\n\n\n\nAutrement, vous pouvez utiliser la méthode XSLTProcessor::transformToURI de la manière suivante ;titre | artiste | Empire | Hide your heart | Bonnie | Greatest Hits | Dolly Parton | Still got | Eros |
bgcolor="red">Eros Ramazzotti |
One night only |
bgcolor="red">Bee Gees |
Sylvias | Maggie May | Rod | Romanza | Andrea |
---|
Le résultat alors sera enregistré dans le fichier « » à côté du fichier code PHP, ou si vous voulez, vous pouvez mentionner un autre chemin.
Voici un aperçu du résultat :
Au cas où vous rencontrez une erreur pendant la transformation, le message d’erreur sera copié dans la variable valeursErr que vous avez passé dans la commande PHP LIRE REPONSE COMPLETE.
La bibliothèque XSL de PHP est un excellent outil qui peut remplacer les commandes XSLT APPLIQUER TRANSFORMATION, XSLT FIXER PARAMETRE et XSLT LIRE ERREUR après leur suppression. Cette bibliothèque offre une API riche qui vous permet de réaliser toutes les opérations voulues pendant vos transformations XSL.