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;
xslt_set_sax_handlers 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 .= "" . $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.
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 .= "" . $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:
GUSTAVE FLAUBERT
VIRGINIA WOOLF
]]>