6.Le langage PHP

6.17.Parser un document XML

6.17.4.Transformer un document XML avec XSL

6.17.4.1.Introduction

Nous avons vu précédemment 2 façons de "parser" des documents XML[c'est quoi?] (via l'arbre DOM[comment?] et via un "parseur" SAX[comment?]) afin d'en extraire des données pour les traiter et éventuellement les réafficher sous une forme différente.
Cependant, si votre souhait est de transformer un document XML en un autre type de document texte (texte brut, html, xml, etc.) vous avez la possibilité d'utiliser une troisième façon de faire: appliquer des transformations XSL[c'est quoi?].

6.17.4.2.Installation

Pour pouvoir faire des transformations XSL vous devez vous assurer que la module libxslt a bien été ajouté à la liste des modules gérés par PHP[comment?].

6.17.4.3.Utilisation

La transformation XSL commence par l'instanciation[c'est quoi?] d'un objet XSLTProcessor.
<?php
$xslt = new XSLTProcessor();
?>
Puis charger la feuille XSL une fois cette dernière instanciée (comme nous avons pu le voir pour le traitement d'un document XML avec un arbre DOM)
<?php
$xslDoc = new DOMDocument();
$xslDoc->load($fichierXSL);
$xslt->importStylesheet($xslDoc);
?>
Il est alors possible d'appliquer la transformation sur un objet DOMDocument et d'afficher le résultat par
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load(fichierXML);
echo $xslt->transformToXML($xmlDoc);
?>
Afin de simplifier l'exemple complet, nous remplacerons les appels à load() par loadXML() en précisant non pas un nom de fichier mais le code XML directement:
<?php
$xslt = new XSLTProcessor();
$xslDoc = new DOMDocument();
$xslDoc->loadXML('<?xml version="1.0" encoding="UTF-8"?>'."\n".
                 '<xsl:stylesheet'.
                     ' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"'.
                     ' version="1.0">'.
                 '<xsl:output method="text" encoding="UTF-8"/>'.
                 '<xsl:template match="/">'.
                     'Liste des sites web contenus dans le fichier XML:'.
                     '<xsl:apply-templates/>'.
                 '</xsl:template>'.
                 '<xsl:template match="siteweb">'.
                     '<xsl:value-of select="nom"/>:<xsl:value-of select="url"/>'.
                 '</xsl:template>'.
                 '</xsl:stylesheet>');
$xslt->importStylesheet($xslDoc);
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML('<?xml version="1.0"?>'."\n".
                 '<racine><siteweb>'.
                 '<nom>PHP Facile!</nom>'.
                 '<url>http://www.phpfacile.com</url>'.
                 '</siteweb></racine>');
echo $xslt->transformToXML($xmlDoc);
?>
Ce qui donnera
Liste des sites web contenus dans le fichier XML:PHP Facile!:http://www.phpfacile.com
Ici vous pouvez apprendre :
Forum PHP
Version imprimable: imprimer