Domanda

Il codice di esempio solo che ho trovato finora è così vecchio che non funziona più (utilizza le classi deprecato). Tutto quello che serve è una cosa fondamentale che dimostra:

  1. Caricamento e parsing XML da un file

  2. Definire il gestore di eventi SAX (s)

  3. Leggere gli attributi o valori di testo dell'elemento passato al gestore di eventi

È stato utile?

Soluzione

Come circa la distribuzione stessa ?

XML :: LibXML pagina di distribuzione e fare clic su sfogliare .

Si noti la seguente avvertenza nella :

  

Al momento XML :: LibXML solo fornisce un'interfaccia incompleta implementazione SAX nativa di libxml2. L'implementazione corrente non viene testato in ambiente di produzione. Può provoca problemi di memoria significativi o mostra un comportamento sbagliato.

C'è anche XML :: SAX che viene fornito con bella documentazione . Ho usato un paio di volte e ho lavorato bene per i miei scopi.

Altri suggerimenti

Il suggerimento di Sinan era buona, ma non collegare tutti i puntini. Ecco un programma molto semplice che ho messo insieme:

file 1: I gestori (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: Il programma di test (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: Come ottenere i valori di un attributo elemento. Questo non è stato descritto in un modo che ho potuto utilizzare. Mi ci sono voluti più di un'ora per capire la sintassi. Ecco qui. Nel mio file XML, l'attributo era ss: Index. La definizione dello spazio dei nomi per la ss era xmlns: ss = "urn: schemas-microsoft-com: office: foglio di calcolo". Pertanto, al fine di ottenere l'attributo Index sciocca, avevo bisogno di questo:

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

E 'stato doloroso.

XML :: :: LibXML Sax implementa Perl SAX interfaccia e non v'è un bel documento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top