создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

xslt_set_sax_handlersПред.

След.

xslt_set_sax_handlers

(PHP4 >= 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:

<?

$handlers = array(

"document" => 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 (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.

    Примеры

    Пример 1. xslt_set_sax_handlers() Example

    <?

    //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://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.

    Пример 2. Object oriented handler

    <?

    //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>

    Пред.

    Начало

    След.

    xslt_set_sax_handler

    Уровень выше

    xslt_set_scheme_handler

  • Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

    Ваше письмо×
    Free Web Hosting