xslt_set_sax_handler
<<<
xslt_set_sax_handlers xslt_set_scheme_handler
>>>

8.136 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.136.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);

?>

<< xslt_set_sax_handlers >>
xslt_set_sax_handler XSLT xslt_set_scheme_handler