cvs: phpdoc-it /reference/xslt/functions xslt-set-sax-handlers.xml

From: Date: Fri, 03 Jun 2005 12:28:46 +0000
Subject: cvs: phpdoc-it /reference/xslt/functions xslt-set-sax-handlers.xml
Groups: php.doc.it 
Request: Send a blank email to doc-it+get-728@lists.php.net to get a copy of this message
darvina Fri Jun 3 08:28:46 2005 EDT Modified files: /phpdoc-it/reference/xslt/functions xslt-set-sax-handlers.xml Log: Sync to En tree

http://cvs.php.net/diff.php/phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml?r1=1.4&r2=1.5&ty=u Index: phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml diff -u phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml:1.4 phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml:1.5 --- phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml:1.4 Wed May 1 15:16:18 2002 +++ phpdoc-it/reference/xslt/functions/xslt-set-sax-handlers.xml Fri Jun 3 08:28:45 2005 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- EN-Revision: 1.2 Maintainer: curcio_it Status: ready --> +<!-- EN-Revision: 1.7 Maintainer: curcio_it Status: ready --> <refentry id='function.xslt-set-sax-handlers'> <refnamediv> <refname>xslt_set_sax_handlers</refname> @@ -15,8 +15,319 @@ <methodparam><type>array</type><parameter>handler</parameter></methodparam> </methodsynopsis> <para> - &warn.undocumented.func; + <function>xslt_set_sax_handlers</function> registra + gli <parameter>handlers</parameter> SAX per il documento, dato + <parameter>processor</parameter> XSLT. </para> + <para> + Il parametro <parameter>handlers</parameter> dovrebbe essere una matrice del seguente formato: + <informalexample> + <programlisting role="php"> +<![CDATA[ +<?php + +$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" + +); +?> +]]> + </programlisting> + </informalexample> + Dove le funzioni seguono la sintassi descritta per lo + schema. + </para> + <note> + <para> + La matrice fornita non richiede di essere completa di tutti i differenti + handler agli elementi sax (sebbene possa esserlo), ma richiede solo di essere conforme al + formato "handler" => "function" descritto in precedenza. + </para> + </note> + <para> + Chiascuno degli handler SAX sono nel formato: + <itemizedlist> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>start_doc</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>end_doc</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>start_element</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>name</parameter></methodparam> + <methodparam><type>array</type><parameter>attributes</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>end_element</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>name</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>start_namespace</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>prefix</parameter></methodparam> + <methodparam><type>string</type><parameter>uri</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>end_namespace</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>prefix</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>comment</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>contents</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>pi</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>target</parameter></methodparam> + <methodparam><type>string</type><parameter>contents</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + <listitem> + <simpara> + <methodsynopsis> + <methodname><replaceable>characters</replaceable></methodname> + <methodparam><type>resource</type><parameter>processor</parameter></methodparam> + <methodparam><type>string</type><parameter>contents</parameter></methodparam> + </methodsynopsis> + </simpara> + </listitem> + </itemizedlist> + </para> + <para> + L'utilizzo di <function>xslt_set_sax_handlers</function> non è molto differente + rispetto ad un parser SAX tipo <function>xml_parse</function> nelle trasformazioni + <function>xslt_process</function>. + </para> + </refsect1> + <refsect1> + &reftitle.examples; + <example> + <title>Esempio di uso <function>xslt_set_sax_handlers</function></title> + <programlisting role="php"> +<![CDATA[ +<?php +// Da ohlesbeauxjours at yahoo dot fr +// Questo è un semplice esempio che applica strtoupper() +// sul contenuto di ciascun tag <auteur> e visualizza +// l'albero XML risultante: + +$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>'; + +// Handlers : +function start_document() +{ + // inizia la lettura del coumento +} + +function end_document() +{ + // fine lettura del documento +} + +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; +} + +// Trasformazione : +$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); +?> +]]> + </programlisting> + </example> + <para> + Si può anche utilizzare <function>xslt_set_object</function> per implementare i + propri handler in un oggetto. + </para> + <example> + <title>Handler orientato agli oggetti</title> + <programlisting role="php"> +<![CDATA[ +<?php +// Questa è una versione ad oggetti dell'esempi precedente +class data_sax_handler { + + var $buffer, $tag, $attrs; + + var $_xh; + + function data_sax_handler($xml, $xsl) + { + // la nostra risorsa xslt + $this->_xh = xslt_create(); + + xslt_set_object($this->_xs, $this); + + // configura gli handler 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() + { + // inizia la lettura del documento + } + + function end_document() { + // completa la lettura del documento + } + + 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); + +?> +]]> + </programlisting> + <para> + Entrambi gli esempi visualizzeranno: + </para> + <screen role="xml"> +<![CDATA[ +<livre> + <auteur>GUSTAVE FLAUBERT</auteur> +</livre> +<livre> + <auteur>VIRGINIA WOOLF</auteur> +</livre> +]]> + </screen> + </example> </refsect1> </refentry>
« previous php.doc.it (#728) next »