|  | 
 
 
  xslt_set_sax_handlersSet the SAX handlers to be called when the XML document gets processed 
  Description
   void xslt_set_sax_handlers
    ( resource $processor, array$handlers) 
   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.
   
  Parameters
    
    
processor
The XSLT processor
link identifier, created with xslt_create.
     handlers
      
       Where the functions follow the syntax described for the scheme handler
       functions.handlersshould be an array in the following format: 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) 
  Return Values
   No value is returned.
   
  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>
 |