Frage

Das einzige Beispiel Code, den ich bisher gefunden habe, ist so alt es nicht mehr funktioniert (verwendet Klassen veraltet). Alles was ich brauche ist etwas Grundsätzliches, das zeigt:

  1. Laden und Parsen der XML-Daten aus einer Datei

  2. Definieren der SAX-Ereignishandler (n)

  3. Beim Lesen der Attribute oder Textwerte des Elements an den Ereignishandler übergeben

War es hilfreich?

Lösung

Wie über die Verteilung selbst ?

Zum XML :: LibXML Verteilung und klicken Browse .

Beachten Sie die folgende Warnung in der Dokumentation :

  

Im Moment XML :: LibXML bietet nur eine unvollständige Schnittstelle zu libxml2 nativen SAX-Implementierung. Die aktuelle Implementierung ist nicht in der Produktionsumgebung getestet. Es kann verursacht erhebliche Gedächtnisprobleme oder zeigt falsches Verhalten.

Es gibt auch XML :: SAX , die mit schöne Dokumentation . Ich habe es ein paar Mal und funktionierte gut für meine Zwecke.

Andere Tipps

Sinan Vorschlag war gut, aber es hat alle Punkte nicht verbinden. Hier ist ein sehr einfaches Programm, dass ich zusammengeschustert:

Datei 1: Die 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 Elements Attribut erhalten. Dies wurde nicht in einer Art und Weise beschrieben, dass ich verwenden könnte. Es dauerte über eine Stunde, um die Syntax herauszufinden. Hier ist es. In meiner XML-Datei, war das Attribut ss: Index. Die Namespace-Definition für ss war xmlns: ss = "urn: schemas-microsoft-com: office: Tabelle". Somit wird, um das dumme Index-Attribut zu bekommen, musste ich diese:

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

Das war schmerzhaft.

XML :: LibXML :: Sax Arbeitsgeräte der Perl SAX-Schnittstelle und es gibt ein schönes Dokument.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top