xslt_set_sax_handlers
    (PHP 4 >= 4.0.6, PECL)
xslt_set_sax_handlers -- 
     XMLドキュメントを処理する際にコールされる SAX ハンドラを設定する
    
説明
void 
xslt_set_sax_handlers ( resource processor, array handlers )
     xslt_set_sax_handlers() は、与えられた XSLT
     processor リソースに文章のための SAX ハンドラ
     handlers を設定します。
    
     handlers は、
     次のフォーマット形式の配列でなければなりません。
      
     ここでの関数は、スキーマハンドラ関数のシンタックスに従います。
    
注意: 
      与えられた配列は全ての異なる 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 )
       
    
     xslt_set_sax_handlers() を使用することは、
     xslt_process() を使用した変換の結果を
     xml_parse() のような SAX パーサで実行することと比べて
     あまり難しく見えません。
    
例
例 1. xslt_set_sax_handlers() Example 
<?php // ohlesbeauxjours at yahoo dot fr より。 // これは、全ての <auteur> タグの内容に strtoupper() を適用し、 // 結果の XML ツリーを表示する、というシンプルな例です。
  $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>';
  // ハンドラ : function start_document() {   // 文章の読み込みを開始する }
  function end_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; }
  // 変換する : $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); ?>
 |  
  | 
     オブジェクト内にハンドラを実装したい場合、
     xslt_set_object() を使用することもできます。
    
例 2. オブジェクト指向ハンドラ 
<?php // これは、前の例のオブジェクト指向バージョン class data_sax_handler {
    var $buffer, $tag, $attrs;
    var $_xh;
    function data_sax_handler($xml, $xsl)   {       // XSLT リソース       $this->_xh = xslt_create();
        xslt_set_object($this->_xs, $this);
        // SAX ハンドラを設定する       $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>  |  
  |