xslt_process

(PHP 4 >= 4.0.4)

xslt_process ? Transforme des données XML avec XSLT

Description

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.

AVERTISSEMENT
Depuis PHP 4.0.6, cette fonction n'accepte plus de chaînes XML dans les paramètres xmlcontainer ou xslcontainer. Passer une chaîne contenant du XML dans un de ces paramètres engendrera une erreur de segmentation dans les versions Sablotron supérieures ou égales à 0.95.

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...

Exemple 2704. Utilisation de xslt_process() pour transformer un fichier XML avec un fichier XSL en un autre fichier XML

<?php

/* Allocation du processeur XSLT */
$xh = xslt_create();

/* Traitement du document */
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
   echo
"Réussi. sample.xml a été transformé par sample.xsl en result.xml";
   echo
", result.xml contient ceci : \n<br />\n";
   echo
"<pre>\n";
  
readfile('result.xml');
   echo
"</pre>\n";
} else {
   echo
"Désolé, sample.xml n'a pu être transformé par sample.xsl en ";
   echo
" result.xml. La raison est " . xslt_error($xh) . " et ";
   echo
" 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.

Exemple 2705. 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) {
   echo
"Réussi. sample.xml a été transformé par sample.xsl en result.xml";
   echo
", result.xml contient ceci : \n<br />\n";
   echo
"<pre>\n";
   echo
$result;
   echo
"</pre>\n";
} else {
   echo
"Désolé, sample.xml n'a pu être transformé par sample.xsl en ";
   echo
" result.xml. La raison est " . xslt_error($xh) . " et ";
   echo
" 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à où la syntaxe de buffers d'arguments de XSLT prend la relève. Au lieu de fichiers en termes 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 variables, et de retrouver le résultat dans une troisième variable.

Exemple 2706. 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) {
   echo
"Réussi. sample.xml a été transformé par sample.xsl en result.xml";
   echo
", result.xml contient ceci : \n<br />\n";
   echo
"<pre>\n";
   echo
$result;
   echo
"</pre>\n";
}
else {
   echo
"Désolé, sample.xml n'a pu être transformé par sample.xsl en ";
   echo
" result.xml. La raison est " . xslt_error($xh) . " et ";
   echo
" 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ètres au document XSLT.

Exemple 2707. Passer des variables PHP à un fichier XSL

<?php

// XML string
$xml = '<?xml version="1.0"?>
<para>
 change me
</para>'
;

// XSL string
$xsl = '
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no"
 omit-xml-declaration="yes"  media-type="text/html"/>
 <xsl:param name="myvar"/>
 <xsl:param name="mynode"/>
 <xsl:template match="/">
Ma variable PHP : <xsl:value-of select="$myvar"/><br />
Mon node set : <xsl:value-of select="$mynode"/>
 </xsl:template>
</xsl:stylesheet>'
;


$xh = xslt_create();

// le deuxième paramètre sera interprété comme une chaîne
$parameters = array (
 
'myvar' => 'test',
 
'mynode' => '<foo>bar</foo>'
);

$arguments = array (
 
'/_xml' => $xml,
 
'/_xsl' => $xsl
);

echo
xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments, $parameters);

?>

L'exemple ci-dessus va afficher :


Ma variable PHP : test<br />
Mon node set : &lt;foo&gt;bar&lt;/foo&gt;

      

Note: Notez que vous devez préfixer le chemin par file:// si vous utilisez Windows.



Rechercher une fonction PHP

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

5 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Références

  1. Consulter le document html Langue du document: fr Manuel PHP : http://be2.php.net, xslt_process

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-10917
Document créé le 23/02/07 00:43, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http://www.gaudry.be/php-rf-function.xslt-process.html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,41 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Qui comprend le nouveau en réchauffant l'ancien peut devenir un maître.

Confucius
 
l'infobrol
Nous sommes le Dimanche 03 Juin 2012, 06:31, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)