2009-08-26 6 views
1

Ich versuche, XPath zu verwenden, um einige HTML-Tags und Daten zu extrahieren, und dafür muss ich XML::LibXML Modul verwenden.Kann nicht XML :: LibXML-Modul unter Windows

Ich habe versucht, es von CPAN-Shell installieren, aber es installiert nicht.

Ich folgte den Anweisungen von CPAN Seite über die Installation, die wir libxml2, iconv und zlib Wrapper installieren müssen, bevor XML::LibXML Installation und es heraus funktionierte nicht.

Wenn es noch andere einfachere Module gibt, die meine Aufgabe erledigen, lassen Sie es mich bitte wissen.

Die Aufgabe auf der Hand:

ich auf einer HTML-Seite für einen bestimmten <dd> Tag bin auf der Suche, die wirklich groß ist (etwa 5.000-10.000) <dd> und <dt> Tags. Also, ich schreibe ein Skript, das den Inhalt innerhalb <dd> Tag und holt den Inhalt innerhalb der entsprechenden (nächsten) <dt> Tag.

Ich wünschte, ich könnte ich etwas klarer gewesen sein. Jede Hilfe wird sehr geschätzt.

+1

Wir brauchen mehr Details. Was ist der Fehler, den Sie von der Installation der CPAN-Shell bekommen? –

+0

Können Sie uns zeigen, wie Sie es installieren möchten? –

+0

ActivePerl oder Erdbeer Perl? Welche Version? –

Antwort

6

Wenn Sie Activestate Perl verwenden, sollten Sie die Repositories auf ActivePerl 10xx Win32 PPM packages-ppm und dann

 
ppm install XML::LibXML 

Der Versuch, HTML zu analysieren verwenden hinzu- als XML im Allgemeinen keine angenehme Aufgabe. Ich denke, ist besser geeignet für die Aufgabe.

#!/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> 

Ausgang:

 
$VAR1 = [ 
      [ 
      'One', 
      '1' 
      ], 
      [ 
      'Two', 
      '2' 
      ] 
     ]; 
1

Wenn Sie nur XPath-Abfragen möchten, dann habe ich gestern ein Skript geschrieben, das XML :: XPath :: XMLParser verwendet, um XPath-Abfragen in einer XML-Datei auszuführen.

Ich habe es sowohl mit Activestate Perl-Installation und mit Erdbeere Perl auf Windows getestet.

Ich kann mich nicht daran erinnern, zu cpan gehen zu müssen, um irgendwelche Module zu installieren (obwohl ich früher und habe es vergessen :)), vielleicht können Sie stattdessen das XML :: XPath-Modul verwenden?

Hier ist die Probe aus der Dokumentation

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"; 
} 
+1

Da es unwahrscheinlich ist, erhalten Sie Win32-Versionen von libxml2, iconv und zlib (obwohl sie existieren, siehe http://gnuwin32.sourceforge.net/packages.html zum Beispiel), um mit dem XML :: LibXml-Modul zu arbeiten denke, dass chollidas Ansatz besser klingt. – ewall

+0

@ewall - geben Sie etwas Kontext. chollidas Ansatz ist besser als was? – ysth

1

Unter der Annahme, dass Sie Activestate Perl verwenden, können Sie XML::LibXML funktioniert ganz gut erhalten. Sie können XML erhalten :: LibXML von Randy Kobes' site und Sie erhalten libxslt/libxml, etc von zlatkovic.com

ich Libxml einfach zu installieren und dann ppm verwenden, um XML zu installieren :: LibXML. Funktioniert gut.

Wenn Sie Strawberry Perl verwenden, sollte CPAN für Sie arbeiten, da libxml2 usw. Teil der Strawberry Perl Distribution sind, glaube ich.

Verwandte Themen