2009-08-26 76 views
1

我試圖使用XPath來提取一些HTML標籤和數據,爲此我需要使用XML::LibXML模塊。無法在Windows上安裝XML :: LibXML模塊

我試着從CPAN外殼安裝它,但它沒有安裝。

我跟着從CPAN網站有關安裝說明,我們需要安裝XML::LibXML之前安裝libxml2iconvzlib包裝和它沒有工作了。

此外,如果有任何其他更簡單的模塊完成我的任務,請讓我知道。

手頭的任務:

我正在尋找一個HTML頁面上的特定<dd>標籤,它是真正的大(約5000 - 10000)<dd><dt>標籤。因此,我正在編寫一個腳本,用於匹配<dd>標記中的內容並獲取相應(下一個)<dt>標記中的內容。

我希望我能更清楚一點。任何幫助是極大的讚賞。

+1

我們需要更多的細節。你從CPAN shell安裝中得到的錯誤是什麼? – 2009-08-26 20:24:28

+0

你能告訴我們你是如何安裝它的嗎? – 2009-08-27 16:51:00

+0

ActivePerl或Strawberry Perl?哪個版本? – 2009-08-27 22:54:18

回答

6

如果您正在使用的ActiveState Perl的,你應該在ActivePerl 10xx Win32 PPM packages列出的庫添加到ppm然後用

 
ppm install XML::LibXML 

Trying,作爲XML通常是不愉快的任務來解析HTML。我認爲HTML::TokeParser更適合這項任務。

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

輸出:

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

如果您只是想要XPath查詢,那麼我昨天剛剛寫了一個腳本,它使用XML :: XPath :: XMLParser在xml文件上執行XPath查詢。

我已經用Activestate的perl安裝和windows上的草莓perl測試了它。

我不記得必須去cpan安裝任何模塊(儘管我可能早點忘了這麼做:),所以也許你可以使用XML :: XPath模塊呢?

下面是從文檔

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

由於不太可能獲得libxml2,iconv和zlib的Win32版本(儘管它們存在,例如,請參閱http://gnuwin32.sourceforge.net/packages.html)以使用XML :: LibXml模塊,但我認爲chollida的方法聽起來更好。 – ewall 2009-08-26 21:17:28

+0

@ewall - 給出一些上下文。 Chollida的方法比什麼好? – ysth 2009-08-27 16:31:08

1

假設你正在使用的ActiveState Perl的樣本,就可以得到XML::LibXML工作得很好。 您可以從Randy Kobes' site獲得XML ::的libxml,你從zlatkovic.com

得到的libxslt/libxml的,等我只是第一次安裝的libxml然後用PPM來安裝XML ::的libxml。工作得很好。

如果你使用Strawberry Perl,CPAN應該爲你工作,因爲libxml2等是我相信的Strawberry Perl發行版的一部分。