(PHP 5 >= 5.0.4, PHP 7, PHP 8)
XSLTProcessor::registerPHPFunctions — Active l'utilisation de PHP dans les feuilles de styles XSLT
Cette méthode permet d'utiliser les fonctions PHP en tant que fonctions XSLT dans les feuilles de style XSL.
functions vaut null par défaut, ce qui signifie
que par défaut, l'appel de cette méthode active l'accès à
toutes les fonctions PHP.
functionsUtiliser ce paramètre pour restreindre les fonctions PHP accessibles depuis XSLT.
Ce paramètre peut être l'un des suivants :
null pour indiquer que toutes les fonctions sont autorisées,
un string (nom d'une fonction),
un array indexé contenant des noms de fonctions,
ou un array associatif où les clés représentent le nom de la fonction
et la valeur associée est un callable.
Lance une ValueError si le nom d'une fonction de rappel n'est pas valide.
Lève une exception ValueError si
options contient une option invalide.
Lève une exception ValueError si
overrideEncoding utilise un encodage inconnu.
Lance une TypeError si une fonction de rappel donnée n'est pas appelable.
Aucune valeur n'est retournée.
| Version | Description |
|---|---|
| 8.4.0 | Les noms de fonction de rappel invalides lancent maintenant une ValueError. Passer une entrée non appelable lance maintenant une TypeError. |
| 8.4.0 |
Il est désormais possible d'utiliser des callable comme callbacks
lorsqu'on utilise functions avec des entrées de type array.
|
Exemple #1 Appel d'une fonction PHP depuis une feuille de style
<?php
$xml = <<<EOB
<allusers>
<user>
<uid>bob</uid>
</user>
<user>
<uid>joe</uid>
</user>
</allusers>
EOB;
$xsl = <<<EOB
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="allusers">
<html><body>
<h2>Users</h2>
<table>
<xsl:for-each select="user">
<tr><td>
<xsl:value-of
select="php:function('ucfirst',string(uid))"/>
</td></tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
EOB;
$xmldoc = new DOMDocument();
$xmldoc->loadXML($xml);
$xsldoc = new DOMDocument();
$xsldoc->loadXML($xsl);
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
echo $proc->transformToXML($xmldoc);
?>