2009-08-25 13 views
3

Der einzige Beispielcode, den ich bisher gefunden habe, ist so alt, dass er nicht mehr funktioniert (veraltete Klassen). Ich brauche nur etwas Grundsätzliches, das zeigt:Wie verwende ich XML :: LibXML zum Parsen von XML mit SAX?

  1. Laden und Parsen der XML-Daten aus einem

  2. Definition der SAX-Ereignishandler (n) Datei

  3. die Attribute oder Textwerte des Lese Element übergeben an den Ereignishandler

Antwort

7

How about the distribution itself?

Gehen Sie zu XML::LibXML distribution page und klicken Sie auf browse.

Beachten Sie die folgende Warnung im documentation:

Am XML Moment :: LibXML bietet nur eine unvollständige Schnittstelle zu nativen SAX-Implementierung libxml2. Die aktuelle Implementierung wird nicht in der Produktionsumgebung getestet. Dies kann zu erheblichen Speicherproblemen oder zu falschem Verhalten führen.

Es gibt auch XML::SAX, die mit nice documentation kommt. Ich benutzte es ein paar Mal und arbeitete gut für meine Zwecke.

+0

Danke. Ich habe den Link "Browse" vorher nie bemerkt. Ich habe die Warnung gesehen, die Sie jedoch anführen. Würden Sie einen anderen Perl SAX Parser empfehlen? Ich bin nicht wählerisch. Es ist nicht für große Dateien, aber ich bevorzuge den ereignisgesteuerten Ansatz für dieses Problem, weil ich sparse Datenausgabe von Excel lese. –

+0

Die XML :: SAX-Dokumentation sieht verständlich aus. Du bekommst meine Stimme. –

+0

@Paul Vielen Dank. –

6

Sinans Vorschlag war gut, aber er verband nicht alle Punkte. Hier ist ein sehr einfaches Programm, das ich zusammengeschustert:

Datei 1: Der Handler (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; 

Datei 2: Das Testprogramm (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"); 

Hinweis: Wie Sie die Werte eines Elementattributs erhalten. Dies wurde nicht in einer Weise beschrieben, die ich verwenden könnte. Ich brauchte über eine Stunde, um die Syntax herauszufinden. Hier ist es. In meiner XML-Datei war das Attribut ss: Index. Die Namespacedefinition für ss lautet xmlns: ss = "urn: schemas-microsoft-com: office: talkline". Um das alberne Indexattribut zu erhalten, brauchte ich das also:

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

Das war schmerzhaft.

0

XML :: LibXML :: Sax implementiert und es gibt ein nettes Dokument.