Impossible d'installer le module XML :: LibXML sous Windows
-
20-09-2019 - |
Question
Je suis en train d'utiliser XPath
pour extraire certaines balises HTML et des données et que je dois utiliser le module de XML::LibXML
.
J'ai essayé de l'installer à partir de shell CPAN mais il ne l'installe pas.
J'ai suivi les instructions à partir du site CPAN sur l'installation, que nous devons installer des enveloppes libxml2
, iconv
et zlib
avant d'installer XML::LibXML
et il ne fonctionne pas.
En outre, s'il y a un autre module simple qui obtient ma tâche faite, s'il vous plaît laissez-moi savoir.
La tâche:
Je suis à la recherche d'une balise de <dd>
spécifique sur une page html qui est vraiment grand (environ 5000-10000) balises <dd>
et <dt>
. Donc, je suis en train d'écrire un script qui correspond au contenu de balise <dd>
et va chercher le contenu dans le correspondant (suivant) balise <dt>
.
Je souhaite que je aurais-je été un peu plus clair. Toute aide est grandement appréciée.
La solution
Si vous utilisez ActiveState Perl, vous devez ajouter les dépôts listés à ActivePerl 10xx paquets PPM Win32 à ppm
puis utilisez
ppm install XML::LibXML
Essayer d'analyser HTML comme XML est généralement pas une tâche agréable. Je pense que HTML :: TokeParser est plus adapté à la tâche.
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser;
my $p = HTML::TokeParser->new(\*DATA);
my @definitions;
while ( my $dl_tag = $p->get_tag('dl') ) {
while ( my $dt_tag = $p->get_tag('dt') ) {
my $term = $p->get_trimmed_text('/dt');
my $dd_tag = $p->get_tag('dd');
my $defn = $p->get_trimmed_text('/dd');
push @definitions, [$term, $defn];
}
}
use Data::Dumper;
print Dumper \@definitions;
__DATA__
<dl>
<dt>One</dt>
<dd>1</dd>
<dt>Two</dt>
<dd>2</dd>
</dl>
Sortie:
$VAR1 = [ [ 'One', '1' ], [ 'Two', '2' ] ];
Autres conseils
Si vous voulez juste des requêtes XPath je viens d'écrire hier un script qui utilise XML :: XPath :: XMLParser pour faire des requêtes XPath sur un fichier xml.
Je l'ai testé à la fois l'installation de Perl ActiveState et perl de fraises sur les fenêtres.
Je ne me souviens pas avoir à aller à CPAN pour installer des modules (bien que je l'ai déjà et j'ai oublié le faire :)), de sorte que vous pouvez peut-être utiliser le module XML :: XPath à la place?
Voici l'exemple de la documentation
use XML::XPath;
use XML::XPath::XMLParser;
my $xp = XML::XPath->new(filename => 'test.xhtml');
my $nodeset = $xp->find('/html/body/p'); # find all paragraphs
foreach my $node ($nodeset->get_nodelist) {
print "FOUND\n\n",
XML::XPath::XMLParser::as_string($node),
"\n\n";
}
En supposant que vous utilisez ActiveState Perl, vous pouvez obtenir XML :: LibXML fonctionne très bien. Vous pouvez obtenir XML :: LibXML de site Randy Kobes et vous obtenez libxslt / libxml , etc de zlatkovic.com
Je viens d'installer libxml, puis utilisez ppm installer XML :: LibXML. Fonctionne très bien.
Si vous utilisez Strawberry Perl , CPAN devrait fonctionner pour vous libxml2, etc font partie de la fraise distribution de Perl, je crois.
Voir aussi mon message dans le fil Comment installer XML :: LibXML pour ActivePerl .
aborde certains problèmes / solutions que je rencontrais l'installation XML LibXML utilisant PPM.