xslt_set_sax_handlers  xslt_set_sax_handlers    (PHP 4 >= 4.0.6, PECL)
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>