7.111 XSLT
7 Index des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . xslt_create . xslt_errno . xslt_error . xslt_free ->xslt_process . xslt_set_base . xslt_set_encoding . xslt_set_error_handler . xslt_set_log . xslt_set_sax_handler . xslt_set_sax_handlers . xslt_set_scheme_handler . xslt_set_scheme_handlers
|
7.111.11 xslt_process()
Transforme des données
XML
avec
XSLT
[ Exemples avec xslt_process ] PHP 4 >= 4.0.3
mixed
xslt_process (
resource
xh
,
string
xmlcontainer
,
string
xslcontainer
,
string
resultcontainer
,
array
arguments
,
array
parameters
)
xslt_process
fait partie de la nouvelle
vague de fonctions
XSLT
. Elle vous permet de
réaliser des transformations
XSLT
en
utilisant n'importe quelle type de source : des conteneurs.
Cela se fait grâce à l'utilisation de buffers
d'arguments : un concept issu de Sablotron (actuellement,
c'est le seul processeur
XSLT
qui le
supporte). Les conteneurs sont par défaut des fichiers
qui contiennent le document à traiter. Le conteneur
de résultat est par défaut un fichier qui recevra
le document traité. Si le conteneur de résultat
n'est pas fourni (l'argument vaut alors
NULL
), le résultat
sera retourné par la fonction.
Attention |
Cette fonction a vu ses arguments être modifié depuis la
version
PHP
4.0.6. Ne placez pas le code
XML
ou XSL dans les
deuxième et troisième arguments, car cela engendrera
une erreur de segmentation (
segmentation fault
),
dans les versions de
Sablotron
0.95 et plus récentes.
|
Les conteneurs peuvent aussi être modifiés via
le tableau
$arguments
.
Le type le plus simple de transformation réalisable avec
xslt_process
est la transformation d'un fichier
XML
avec un fichier
XSLT
,
en plaçant le résultat dans un troisième fichier.
Faire cela avec Sablotron est très facile...
Utilisation de xslt_process pour transformer un fichier XML avec un fichier XSL en un autre fichier XML |
<?php
// Allocation du processuer XSLT $xh = xslt_create();
// Traitement du document if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) { print "Réussi. sample.xml a été transformé par sample.xsl en result.xml"; print ", result.xml contient ceci : \n<br>\n"; print "<pre>\n"; readfile('result.xml'); print "</pre>\n"; } else { print "Désolé, sample.xml n'a pu être transformé par sample.xsl en "; print " result.xml. La raison est " . xslt_error($xh) . " et "; print " le code d'erreur est " . xslt_errno($xh); }
xslt_free($xh);
?>
|
Même si cette fonctionnalité est très pratique, il arrive souvent qu'en environnement
web, vous vouliez être capable d'afficher directement votre résultat. Par conséquent,
si vous omettez le troisième argument de
xslt_process
, ou que
vous fournissez la valeur
NULL
à la place, la fonction va automatiquement
retourner le résultat de la transformation
XSLT
, au lieu de l'écrire dans un
fichier.
Utilisation de xslt_process pour transformer un fichier XML avec un fichier XSL et le placer dans une variable |
<?php
// Allocation d'un analyseur XSLT $xh = xslt_create();
// Traitement du document $result = xslt_process($xh, 'sample.xml', 'sample.xsl'); if ($result) { print "Réussi. sample.xml a été transformé par sample.xsl en result.xml"; print ", result.xml contient ceci : \n<br>\n"; print "<pre>\n"; print $result; print "</pre>\n"; } else { print "Désolé, sample.xml n'a pu être transformé par sample.xsl en "; print " result.xml. La raison est " . xslt_error($xh) . " et "; print " le code d'erreur est " . xslt_errno($xh); }
xslt_free($xh);
?>
|
Les deux cas de transformations
XSLT
ci-dessus sont les cas les plus simples,
quand on parle de transformation
XSLT
, et ce sont les cas les plus courants, mais
il existe des situations où vous obtenez vos données
XML
et
XSLT
de sources externes
comme des sockets ou des bases de données. Dans ces cas, vous avez déjà les données
dans une variable, et en mode de production, écrire ces données dans des fichiers
serait trop inefficace. C'est là ou la syntaxe de buffers d'arguments de
XSLT
prend la relève. Au lieu de fichier en terme d'arguments
XML
et
XSLT
, vous pouvez
passer des buffers d'arguments, qui sont alors substitués en valeur au
cinquième argument de la fonction
xslt_process
.
L'exemple suivant vous montre comment traiter du
XML
et du
XSLT
issus de variable,
et de retrouver le résultat dans une troisième variable.
Utilisation de xslt_process pour transformer une variable XML avec une autre variable XSL et placer le résultat dans une variable |
<?php // $xml et $xsl contiennent des données XML et XSL
$arguments = array( '/_xml' => $xml, '/_xsl' => $xsl );
// Allocation d'un analyseur XSLT $xh = xslt_create();
// Traitement du document $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); if ($result) { print "Réussi. sample.xml a été transformé par sample.xsl en result.xml"; print ", result.xml contient ceci : \n<br>\n"; print "<pre>\n"; print $result; print "</pre>\n"; } else { print "Désolé, sample.xml n'a pu être transformé par sample.xsl en "; print " result.xml. La raison est " . xslt_error($xh) . " et "; print " le code d'erreur est " . xslt_errno($xh); } xslt_free($xh); ?>
|
Finalement, le dernier argument de
xslt_process
représente un tableau de tous les paramètres que vous souhaitez passer
au document
XSLT
. Ces paramètres sont accessibles depuis le fichier
XSL en utilisant l'instruction
<xsl:param name="parameter_name">
.
Les paramètres doivent être encodés au format UTF-8
et leur valeur sera interprétée comme une chaîne de
caractères par l'analyseur
Sablotron
.
En d'autres termes, vous ne pouvez pas passer des groupes de noeuds
(
node-sets
) comme paramètre au document
XSLT
.
Note |
Notez que
file://
est nécessaire au début des
chemin si vous utilisez Windows.
|
|