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 :
domDocument
et à la méthode domDocument :: load()
qui chargera le fichier à partir de son URL;domDocument :: loadXML()
XSLTProcessor :: importStylesheet()
XSLTProcessor :: TransformToXml()
<?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);
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); ?>
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! ?>