Technologies internet


Transformations XSLT en PHP 5


Voir :

Considérons le fichier collection.xml :

<collection>
 <cd>
  <title>Fight for your mind</title>
  <artist>Ben Harper</artist>
  <year>1995</year>
 </cd>
 <cd>
  <title>Electric Ladyland</title>
  <artist>Jimi Hendrix</artist>
  <year>1997</year>
 </cd>
</collection>

et la transformation collection.xsl :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:param name="owner" select="'Nicolas Eliaszewicz'"/>
 <xsl:output method="html" encoding="iso-8859-1" indent="no"/>
 <xsl:template match="collection">
  Hey! Welcome to <xsl:value-of select="$owner"/>'s sweet CD collection!
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="cd">
  <h1><xsl:value-of select="title"/></h1>
  <h2>by <xsl:value-of select="artist"/> - <xsl:value-of select="year"/></h2>
  <hr />
 </xsl:template>
</xsl:stylesheet>

L'exécution de la transformation en PHP se décompose en cinq étapes :

<?php

$xml_filename = 'collection.xml';
$xsl_filename = 'collection.xsl';

$doc = new DOMDocument();
$proc = new XSLTProcessor();       // Nouvelle instance

$xsl = new DOMDocument();
$xsl->load($xsl_filename);         // Chargement du fichier XSL
$proc->importStyleSheet($xsl);      // Import de la feuille XSL

$doc->load($xml_filename);         // Chargement du fichier XML
echo $proc->transformToXML($doc);  // Transformation et affichage du résultat

?>

Si vous voulez sauvegarder les résultats de la transformation, utilisez la méthode save de DOMDocument (à la place de l'instruction echo) :

$doc->save($xml_filename);

Passage de paramètres à la feuille XSLT

Il est possible de récupérer un ou plusieurs paramètres venant du code PHP. Il suffit d'ajouter des appels de XSLTProcessor :: setParameter ( string Namespace , string Name , string Value ) avant l'exécution de la transformation.

<?php

...

$proc->setParameter('', 'owner', 'Olivier Parmentier');
echo $xsl->transformToXML($doc);

?>

Import du résultat dans DOMXML

Il est possible d'importer le résultat de la transformation XSLT dans DOMXML grâce à la méthode XSLTProcessor :: transformToDoc()

<?php

$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

echo trim($proc->transformToDoc($xml)->firstChild->wholeText);

// le code affichera :
// Hey! Welcome to Nicolas Eliaszewicz's sweet CD collection!
?>