Transformer un document XML avec XSLT et PHP

Code PHP

Voici les étapes

  1. Charger la feuille de style dans un document DOM
  2. Créer le processeur XSLT et importer une feuille de style
  3. Charger le fichier XML à convertir dans un document DOM
  4. Convertir en XML et afficher
<?php
$rdfFilename = 'dcterms.rdf';
$xslFilename = 'dcterms2xhtml.xsl';

// étape 1 : chargement de la feuille de style
$xsl = new DOMDocument();
$xsl->load($xslFilename);

// étape 2: créer le processeur XSLT et importer une feuille de style
$xslt = new XSLTProcessor();
$xslt->registerPHPFunctions('basename'); // cette ligne sera expliqué plus loin...0
$xslt->importStylesheet($xsl);

// étape 3: charger le fichier XML à convertir dans un document DOM
$xml = new DOMDocument();
$xml->load($rdfFilename);

// étape 4: servir chaud
print $xslt->transformToXML($xml);
?>

Utiliser des fonctions PHP dans une feuille XSLT

On peut utiliser des fonctions PHP en utilisant trois déclarations:

  1. $xsltProcessor->registerPHPFunctions('aFunctionName'); (avant l'importStylesheet). Cette déclaration permet de spécifier les noms de fonctions qui peuvent être utiliser dans la feuille de transformation XSL. On peut déclarer un nom de fonction ou un tableau de noms de fonction;
  2. L'attribut xmlns:php="http://php.net/xsl" permet de déclarer le namespace "php";
  3. La fonction (xpath): php:function('aFunctionName', string(@unattribut)) exécute la fonction "aFunctionName" avec le paramètre @unattribut.

Exemple de feuille de style

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:dcterms="http://purl.org/dc/terms/"
 >
 <xsl:output method="xml" encoding="UTF-8" indent="yes" 
 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
 doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
 <xsl:template match="//rdf:RDF">
 <html><xsl:apply-templates /></html>
 </xsl:template>
 <xsl:template match="//rdf:RDF/rdf:Description">
   <tr><td></td><td><li><a><xsl:attribute 
  name="href"><xsl:value-of select="@rdf:about" /></xsl:attribute>dcterm:<xsl:value-of 
  select="php:function('basename', string(@rdf:about))" 
  xmlns:php="http://php.net/xsl" /></a></li></td>
   <td><xsl:value-of select="dcterms:description" /></td></tr>
 </xsl:template>
</xsl:stylesheet>

How to replace ' by ''

input.xml

<root>
 Lot of quotes ' and other quotes '.
</root>

stylesheet.xsl

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:str="http://exslt.org/strings"
                extension-element-prefixes="str">

<xsl:template match="/">
  <xsl:variable name="quote">'</xsl:variable>
  <xsl:variable name="doublequote">''</xsl:variable>
  <xsl:value-of select="str:replace(., $quote, $doublequote)" />
</xsl:template>
</xsl:stylesheet>