Наш Telegram бот: @htmlweb_bot

xslt_set_sax_handlers

(PHP 4 >= 4.0.6)

xslt_set_sax_handlers — Задает SAX обработчики, которые будут вызваться после разбора XML докумнента


Описание

void xslt_set_sax_handlers ( resource $processor , array $handlers )

xslt_set_sax_handlers() задает SAX обработчики handlers для документа и заданного ресурса XSLT-процессора processor.

Использование xslt_set_sax_handlers() не сильно отличается от применения SAX парсера, как например xml_parse(), к результату xslt_process() преобразования.


Список параметров

processor -

Идентификатор ссылки на XSLT-процессор, созданный функцией xslt_create().

handlers -

handlers должны быть массивом следующего формата:

$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"
);

Синтаксис функций описан в документации к функциям обработки схем.

Замечание:

Заданный массив не обязан содержать все sax обработчики (хотя он может), но элементы массива должны точно соответствовать формату "обработчик" => "функция", описанному выше.

SAX функции-обработчики имеют следующий формат:

  • 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 )


Возвращаемые значения

Эта функция не возвращает значения после выполнения.


Примеры

Пример #1 Пример использования xslt_set_sax_handlers()
// От ohlesbeauxjours at yahoo dot fr
// В этом примере к содержимому каждого тэга <auteur> 
// применяется функция strtoupper(), а затем выводится
// результат в виде XML дерева:
$xml='<?xml version="1.0"

Также можно воспользоваться функцией xslt_set_object(), если требуется реализовать обработчики внутри объекта.

Пример #2 Обработчик в объектно-ориентированном стиле
// Объектно-ориентированная версия предыдущего примера
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()
  {
        // начало чтения документа
  }
  function end_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);

Оба примера выведут следующее:


<livre>
<auteur>GUSTAVE FLAUBERT</auteur>
</livre>
<livre>
<auteur>VIRGINIA WOOLF</auteur>
</livre>




Смотрите также:
Описание на ru2.php.net
Описание на php.ru