5.5.15

xslt_set_sax_handlers

(PHP 4 >= 4.0.6)

xslt_set_sax_handlersEstablecer los manejadores de SAX que se llamarán al procesar el documento XML

Descripción

void xslt_set_sax_handlers ( resource $processor , array $handlers )

xslt_set_sax_handlers() registra el manejador de SAX dado por handlers para el documento, con un recurso de procesador de XSLT dado por processor.

El uso de xslt_set_sax_handlers() no es muy diferente a ejecutar un analizador de SAX como xml_parse() sobre el resultado de una transformación de xslt_process().

Parámetros

processor

El identificador de enlace del procesador de XSLT, creado con xslt_create().

handlers

handlers debe ser un array con el siguiente formato:

<?php

$manejadores 
= 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"

);
?>
Donde las funciones siguen la sintaxis descrita para las funciones manejadoras de esquemas.

Nota:

El array dado no tiene que contener todos los diferentes elementos de manejadores de SAX (aunque podría), sino solamente seguir el formato "manejador" => "función" descrito antes.

Cada una de las funciones individuales manejadorar de SAX está en el siguiente formato:

  • start_doc ( resource $procesador )

  • end_doc ( resource $procesador )

  • start_element ( resource $procesador , string $nombre , array $atributos )

  • end_element ( resource $procesador , string $nombre )

  • start_namespace ( resource $procesador , string $prefijo , string $uri )

  • end_namespace ( resource $procesador , string $prefijo )

  • comment ( resource $procesador , string $contenido )

  • pi ( resource $procesador , string $objetivo , string $contenido )

  • characters ( resource $procesador , string $contenido )

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Ejemplo de xslt_set_sax_handlers()

<?php
// De ohlesbeauxjours at yahoo dot fr
// He aquí un ejemplo sencillo que aplica strtoupper() al
// contenido de cada etiqueta <auteur> y muestra el
// árbol XML resultante:

$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>'
;

// Manejadores :
function start_document()
{
  
// inicio de la lectura del documento
}

function 
end_document()
{
  
// final de la lectura del documento
}

function 
start_element($analizador$nombre$atributos)
{
  global 
$resultado,$etiqueta;
  
$resultado .= "<"$nombre ">";
  
$etiqueta $nombre;
}

function 
end_element($analizador$nombre)
{
  global 
$resultado;
  
$resultado .= "</" $nombre ">";
}

function 
characters($analizador$datos)
{
  global 
$resultado,$etiqueta;
  if (
$etiqueta == "auteur" ) {
    
$datos strtoupper($datos);
  }
  
$resultado .= $datos;
}

// Transformación :
$xh xslt_create();
$manejadores = array("document" => array("start_document","end_document"),
   
"element" => array("start_element","end_element"),
   
"character" => "characters");

xslt_set_sax_handlers($xh$manejadores);
xslt_process($xh'arg:/_xml''arg:/_xsl'NULL, array("/_xml"=>$xml"/_xsl"=>$xsl));
xslt_free($xh);
?>

También se puede utilizar xslt_set_object() para aplicar los manejadores a un objeto.

Ejemplo #2 Manejador orientado a objetos

<?php
// Esta es la versión orientada a objetos del ejemplo anterior
class gestor_datos_sax {

  var 
$búfer$etiqueta$atributos;

  var 
$_xh;

  function 
gestor_datos_sax($xml$xsl)
  {
      
// el recurso XSLT
      
$this->_xh xslt_create();

      
xslt_set_object($this->_xs$this);

      
// configurar los gestores de SAX
      
$manejadores = array(
        
"document" => array('start_document''end_document'),
        
"element" => array('start_element''end_element'),
        
"character" => 'characters'
      
);

      
xslt_set_sax_handlers($this->_xh$manejadores);

      
xslt_process($this->_xh'arg:/_xml''arg:/_xsl'NULL, array("/_xml"=>$xml"/_xsl"=>$xsl));
      
xslt_free($this->_xh);


  }

  function 
start_document()
  {
        
// inicio de la lectura del documento
  
}

  function 
end_document() {
        
// final de la lectura del documento
  
}

  function 
start_element($analizador$nombre$atributos) {
        
$this->tag $nombre;
        
$this->buffer .= "<" $nombre ">";
        
$this->attrs $atributos;
  }

  function 
end_element($analizador$nombre)
  {
        
$this->tag '';
        
$this->buffer .= "</" $nombre ">";
  }

  function 
characters($analizador$datos)
  {
    if (
$this->tag == 'auteur') {
          
$datos strtoupper($datos);
    }
    
$this->buffer .= $datos;
  }

  function 
get_buffer() {
    return 
$this->buffer;
  }

}

$exec = new gestor_datos_sax($xml$xsl);

?>

Salida de ambos ejemplos:

<livre>
   <auteur>GUSTAVE FLAUBERT</auteur>
</livre>
<livre>
   <auteur>VIRGINIA WOOLF</auteur>
</livre>
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top