Comment puis-je utiliser XML :: LibXML pour analyser XML en utilisant SAX?
-
19-09-2019 - |
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:
-
Chargement en cours et l'analyse syntaxique du XML à partir d'un fichier
-
Définition du gestionnaire d'événements SAX (s)
-
La lecture des attributs ou des valeurs de texte de l'élément passé au gestionnaire d'événements
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.