Question

Le seul exemple de code que je l'ai trouvé à ce jour est si vieux qu'il ne fonctionnera pas plus (utilise des classes dépréciée). Tout ce que je besoin est quelque chose de fondamental qui démontre:

  1. Chargement en cours et l'analyse syntaxique du XML à partir d'un fichier

  2. Définition du gestionnaire d'événements SAX (s)

  3. La lecture des attributs ou des valeurs de texte de l'élément passé au gestionnaire d'événements

Était-ce utile?

La solution

Comment sur la distribution elle-même ?

Aller à la XML :: LibXML page de distribution et cliquez sur parcourir .

Notez l'avertissement suivant dans la :

  

Au moment XML :: LibXML ne fournit qu'une interface incomplète native de mise en œuvre de SAX libxml2. La mise en œuvre en cours n'a pas été testé dans un environnement de production. Il peut provoque des problèmes de mémoire importants ou montre un comportement erroné.

Il y a aussi XML :: SAX qui vient avec belle documentation . Je l'ai utilisé quelques fois et a bien fonctionné pour mes besoins.

Autres conseils

La suggestion était bonne Sinan, mais il ne se connecte pas tous les points. Voici un programme très simple que je bricolé:

fichier 1: Les gestionnaires (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;

Fichier 2: Le programme de 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");

Note: Comment obtenir les valeurs d'un attribut d'élément. Cela n'a pas été décrit d'une manière que je pouvais utiliser. Il m'a fallu plus d'une heure pour comprendre la syntaxe. C'est ici. Dans mon fichier XML, l'attribut a été ss: Index. La définition de l'espace de noms pour ss était xmlns: ss = "urn: schemas-microsoft-com: office: feuille de calcul". Ainsi, afin d'obtenir l'idiot attribut index, je avais besoin ceci:

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

C'était douloureux.

XML :: LibXML :: Sax implémente l'interface Perl SAX et il y a un beau document.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top