8.135 XSLT 
8 Référence des fonctions 
 Manuel PHP 
 . Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes pré-définies . xslt_backend_info . xslt_backend_name . xslt_backend_version . xslt_create . xslt_errno . xslt_error . xslt_free . xslt_getopt . xslt_process . xslt_set_base . xslt_set_encoding . xslt_set_error_handler . xslt_set_log . xslt_set_object . xslt_set_sax_handler ->xslt_set_sax_handlers . xslt_set_scheme_handler . xslt_set_scheme_handlers . xslt_setopt
 
  | 
 
  8.135.22 xslt_set_sax_handlers()
     Configure les gestionnaires SAX qui seront appelés pour gérer les documents XML
    [ Exemples avec xslt_set_sax_handlers ]   PHP 4 >= 4.0.6 
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 :
       
 
<?php
  $handlers = array(
    "document" => array(     "start_doc",     "end_doc"),
    "element"  => array(     "start_element",     "end_element"),
    "namespace" => array(     "start_namespace",     "end_namespace"),
    "comment"   => "comment",
    "pi"        => "pi",
    "character" => "characters"
  ); ?>
 
 |   
 
     0ù les fonctions suivent la syntaxe décrite dans le schéma du gestionnaire de fonctions.
    
| Note |  | 
 
      Le tableau fournit 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écrite ci-dessus.
      
 |   
     Chacune des fonctions du gestionnaire SAX correspondent 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
 .
     
 
| 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=' <books>  <book>   <title>Mme Bovary</title>   <author>Gustave Flaubert</author>  </book>  <book>   <title>Mrs Dalloway</title>   <author>Virginia Woolf</author>  </book> </books>';
  $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"/> <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.
    
| Gestionnaire orienté objet |  
<?php // Voici la version orienté 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);
  ?>
 
 |   
 |