xslt_set_sax_handlers
    (PHP 4 >= 4.0.6)
xslt_set_sax_handlers -- 
     Set the SAX handlers to be called when the XML document gets processed
    
Description
void 
xslt_set_sax_handlers ( resource processor, array handlers)
     xslt_set_sax_handlers() registers the SAX 
     handlers for the document, given a XSLT 
     processor resource.
    
     handlers should be an array in the following format:
      
     Where the functions follow the syntax described for the scheme handler 
     functions.
    
Note: 
      The given array does not need to contain all of the different sax
      handler elements (although it can), but it only needs to conform to 
      "handler" => "function" format described above.
     
     Each of the individual SAX handler functions are in the format below:
     
        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)
       
    
     Using xslt_set_sax_handlers() doesn't look very different than
     running a SAX parser like xml_parse() on the result of an 
     xslt_process() transformation.
    
Examples
Example 1. xslt_set_sax_handlers() Example 
<?php // From ohlesbeauxjours at yahoo dot fr // Here's a simple example that applies strtoupper() on  // the content of every <auteur> tag and then displays the  // resulting XML tree:
  $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>';
  // Handlers : function start_document()  {   // start reading the document }
  function end_document()  {   // end reading the 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); ?>
 |  
  | 
     You can also use xslt_set_object() if you want to
     implement your handlers in an object.
    
Example 2. Object oriented handler 
<?php // This is the object oriented version of the previous example class data_sax_handler {
    var $buffer, $tag, $attrs;
    var $_xh;
    function data_sax_handler($xml, $xsl)   {       // our xslt resource       $this->_xh = xslt_create();
        xslt_set_object($this->_xs, $this);
        // configure sax handlers       $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()    {         // start reading the document   }
    function end_document() {         // complete reading the 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);
  ?>
 |  
 
      Both examples will output:
      <livre>
   <auteur>GUSTAVE FLAUBERT</auteur>
</livre>
<livre>
   <auteur>VIRGINIA WOOLF</auteur>
</livre>  |  
  |