Services webmasters
Partenaires
Jeux concours gratuits
 
xslt_free
<<<
xslt_process xslt_set_base
>>>

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.

<< xslt_process >>
xslt_free XSLT xslt_set_base
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -