Pregunta

El único código de ejemplo que he encontrado hasta ahora es tan viejo que no funcionará más (usa las clases se use). Todo lo que necesito es algo básico que demuestra:

  1. Carga y análisis del XML de un archivo

  2. Definir el controlador de eventos SAX (s)

  3. La lectura de los atributos o valores de texto del elemento pasado al controlador de eventos

¿Fue útil?

Solución

¿Qué hay de la propia distribución ?

XML :: LibXML página de distribución y haga clic en navegue .

Tenga en cuenta la siguiente precaución en el :

  

En el momento XML :: LibXML sólo proporciona una interfaz incompleta a la aplicación nativa de SAX libxml2. La implementación actual no se ha probado en el entorno de producción. Puede que causa problemas significativos de memoria o muestra un comportamiento equivocado.

Hay también XML :: SAX que viene con documentación agradable . He utilizado un par de veces y funcionaba bien para mis propósitos.

Otros consejos

La sugerencia de Sinan era bueno, pero no conectar todos los puntos. Aquí es un programa muy simple que he improvisado:

archivo 1: Los manipuladores (MySAXHandler.pm)

  package MySAXHandler;
  use base qw(XML::SAX::Base);

  sub start_document {
    my ($self, $doc) = @_;
    # process document start event
  }

  sub start_element {
    my ($self, $el) = @_;
    # process element start event
    print "Element: " . $el->{LocalName} . "\n";
  }

1;

file 2: El programa de pruebas (test.pl)

#!/usr/bin/perl

use strict;
use XML::SAX;
use MySAXHandler;

my $parser = XML::SAX::ParserFactory->parser(
        Handler => MySAXHandler->new
);

$parser->parse_uri("some-xml-file.xml");

Nota: Como llegar a los valores de un atributo del elemento. Esto no se describió de una manera que podría utilizar. Me tomó más de una hora para averiguar la sintaxis. Aquí está. En mi archivo XML, el atributo era ss: Índice. La definición de espacio de nombres para SS era xmlns: ss = "urn: schemas-microsoft-com: office: hoja de cálculo". Por lo tanto, con el fin de obtener el atributo Índice de tonto, que necesitaba esto:

my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};

Eso fue doloroso.

XML :: :: LibXML Sax implementa la interfaz Perl SAX y hay un buen documento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top