xslt_set_sax_handlers Set the SAX handlers to be called when the XML document gets processed &reftitle.description; voidxslt_set_sax_handlers resourceprocessor arrayhandlers xslt_set_sax_handlers registers the SAX handlers for the document, given a XSLT processor resource. 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. &reftitle.parameters; processor The XSLT processor link identifier, created with xslt_create. handlers handlers should be an array in the following format: array( "start_doc", "end_doc"), "element" => array( "start_element", "end_element"), "namespace" => array( "start_namespace", "end_namespace"), "comment" => "comment", "pi" => "pi", "character" => "characters" ); ?> ]]> Where the functions follow the syntax described for the scheme handler functions. 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 resourceprocessor end_doc resourceprocessor start_element resourceprocessor stringname arrayattributes end_element resourceprocessor stringname start_namespace resourceprocessor stringprefix stringuri end_namespace resourceprocessor stringprefix comment resourceprocessor stringcontents pi resourceprocessor stringtarget stringcontents characters resourceprocessor stringcontents &reftitle.returnvalues; &return.void; &reftitle.examples; <function>xslt_set_sax_handlers</function> Example tag and then displays the // resulting XML tree: $xml=' Mme Bovary Gustave Flaubert Mrs Dalloway Virginia Woolf '; $xsl=' '; // 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 .= ""; } 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. Object oriented handler _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 .= ""; } 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: GUSTAVE FLAUBERT VIRGINIA WOOLF ]]>