xslt_set_sax_handlers xslt_set_sax_handlers (PHP 4 >= 4.0.6, PECL)
xslt_set_sax_handlers --
Configure les gestionnaires SAX qui seront appelés pour gérer les documents XML
Description void
xslt_set_sax_handlers ( resource processor, array handlers )
xslt_set_sax_handlers() enregistre le gestionnaire SAX
handlers pour le document, en lui donnant
une ressource XSLT processor .
Le paramètre handlers doit être un tableau qui
suit ce format :
0ù les fonctions suivent la syntaxe décrite dans le schéma du gestionnaire de fonctions.
Note :
Le tableau fourni n'a pas besoin de contenir tous les éléments différents du gestionnaire SAX
(bien qu'il le peut), mais il doit uniquement être conforme
au format "gestionnaire" => "fonction" décrit ci-dessus.
Chacune des fonctions du gestionnaire SAX correspond au format suivant :
start_doc ( resource processor )
end_doc ( resource processor )
start_element ( resource processor, string name, array attributes )
end_element ( resource processor, string name )
start_namespace ( resource processor, string prefix, string uri )
end_namespace ( resource processor, string prefix )
comment ( resource processor, string contents )
pi ( resource processor, string target, string contents )
characters ( resource processor, string contents )
Utiliser la fonction xslt_set_sax_handlers() n'est pas vraiment
différent qu'exécuter un analyseur SAX comme xml_parse()
sur un résultat de la transformation xslt_process() .
Exemples Exemple 1. Exemple avec xslt_set_sax_handlers()
<?php // Fournit par ohlesbeauxjours at yahoo dot fr // Voici un exemple simple qui applique la fonction strtoupper() // sur le contenu de chaque balise <auteur> et affiche // le résultat sous forme d'arbre XML : $xml = '<?xml version="1.0"?> <books> <book> <title>Mme Bovary</title> <author>Gustave Flaubert</author> </book> <book> <title>Mrs Dalloway</title> <author>Virginia Woolf</author> </book> </books>' ; $xsl = '<?xml version="1.0"?> <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"/> <xsl:template match="/"> <xsl:for-each select="books/book"> <livre> <auteur><xsl:value-of select="author/text()"/></auteur> </livre> </xsl:for-each> </xsl:template> </xsl:stylesheet>' ; // Gestionnaire : function start_document () { // début de la lecture du document } function end_document () { // fin de la lecture du document } function start_element ( $parser , $name , $attributes ) { global $result , $tag ; $result .= "<" . $name . ">" ; $tag = $name ; } function end_element ( $parser , $name ) { global $result ; $result .= "</" . $name . ">" ; } function characters ( $parser , $data ) { global $result , $tag ; if ( $tag == "auteur" ) { $data = strtoupper ( $data ); } $result .= $data ; } // Transformation : $xh = xslt_create (); $handlers = array( "document" => array( "start_document" , "end_document" ), "element" => array( "start_element" , "end_element" ), "character" => "characters" ); xslt_set_sax_handlers ( $xh , $handlers ); xslt_process ( $xh , 'arg:/_xml' , 'arg:/_xsl' , NULL , array( "/_xml" => $xml , "/_xsl" => $xsl )); xslt_free ( $xh ); ?>
Vous pouvez également utiliser la fonction xslt_set_object()
si vous voulez implémenter votre gestionnaire dans un objet.
Exemple 2. Gestionnaire orienté objet
<?php // Voici la version orientée objet de l'exemple ci-dessus class data_sax_handler { var $buffer , $tag , $attrs ; var $_xh ; function data_sax_handler ( $xml , $xsl ) { // notre ressource xslt $this -> _xh = xslt_create (); xslt_set_object ( $this -> _xs , $this ); // configuration du gestionnaire sax $handlers = array( "document" => array( 'start_document' , 'end_document' ), "element" => array( 'start_element' , 'end_element' ), "character" => 'characters' ); xslt_set_sax_handlers ( $this -> _xh , $handlers ); xslt_process ( $this -> _xh , 'arg:/_xml' , 'arg:/_xsl' , NULL , array( "/_xml" => $xml , "/_xsl" => $xsl )); xslt_free ( $this -> _xh ); } function start_document () { // début de la lecture du document } function end_document () { // fin de la lecture du document } function start_element ( $parser , $name , $attributes ) { $this -> tag = $name ; $this -> buffer .= "<" . $name . ">" ; $this -> attrs = $attributes ; } function end_element ( $parser , $name ) { $this -> tag = '' ; $this -> buffer .= "</" . $name . ">" ; } function characters ( $parser , $data ) { if ( $this -> tag == 'auteur' ) { $data = strtoupper ( $data ); } $this -> buffer .= $data ; } function get_buffer () { return $this -> buffer ; } } $exec = new data_sax_handler ( $xml , $xsl ); ?>
Les deux exemples ci-dessus afficheront :
<livre>
<auteur>GUSTAVE FLAUBERT</auteur>
</livre>
<livre>
<auteur>VIRGINIA WOOLF</auteur>
</livre>
Manuel PHP pour PHP-Nuke © www.stefvar.com