2009-08-26 5 views
1

XPathを使用していくつかのHTMLタグとデータを抽出しようとしており、そのためにXML::LibXMLモジュールを使用する必要があります。WindowsにXML :: LibXMLモジュールをインストールできない

CPANシェルからインストールしようとしましたがインストールされません。

私たちはXML::LibXMLをインストールする前にlibxml2iconvzlibラッパーをインストールする必要があり、それがうまくいかなかったことを、インストールに関するCPANサイトからの指示に従いました。

また、他の簡単なモジュールがあれば、私の仕事が終わってしまいます。私に知らせてください。

当面の作業:

私は(5000周り - 10000)本当に大きなされたHTMLページ上の特定の<dd>のタグを探しています<dd><dt>タグ。ですから、私は<dd>タグ内のコンテンツと一致するスクリプトを作成し、対応する(次の)<dt>タグ内のコンテンツを取得します。

私はもう少し明確になったと思う。どんな助けでも大歓迎です。

+1

詳細が必要です。 CPANシェルのインストール時に発生したエラーは何ですか? –

+0

インストール方法を教えてもらえますか? –

+0

ActivePerlまたはStrawberry Perl?どのバージョン? –

答えて

6

あなたはActiveStateのPerlを使用している場合は、ppmActivePerl 10xx Win32 PPM packagesに掲載されているリポジトリを追加して、XMLは一般的に楽しい作業ではありませんとしてHTMLを解析しよう

 
ppm install XML::LibXML 

を使用する必要があります。私は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のstrawberry perlの両方でテストしました。

モジュールをインストールするためにcpanに行く必要はないと思います(私はこれまでにあっても忘れています:))、おそらくXML :: XPathモジュールを代わりに使うことができますか?ここで

あなたはActiveStateのPerlを使用していると仮定すると、ドキュメント

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

XML :: LibXmlモジュールを使用するには、Win32バージョンのlibxml2、iconv、およびzlib(存在していますが、http://gnuwin32.sourceforge.net/packages.htmlなど)を入手することはできません。チョリダのアプローチがうまくいくと思います。 – ewall

+0

@ewall - いくつかの文脈を与える。チョリダのアプローチは何より良い? – ysth

1

からのサンプルである、あなたはうまく働いXML::LibXMLを得ることができます。 あなたがRandy Kobes' siteからXML ::のlibxmlを得ることができますし、私は最初のlibxmlをインストールしてから、XML ::のlibxmlをインストールするには、PPMを使用zlatkovic.com

からなど、libxsltは/のlibxmlを取得します。うまく動作します。

Strawberry Perlを使用している場合、CPANはlibxml2として動作するはずです。その他は私が信じるStrawberry Perlディストリビューションの一部です。

0

またスレッドHow do I install XML::LibXML for ActivePerl?で私のポストを参照してください。

PPMを使用してXML-LibXMLをインストールする際に発生したいくつかの問題点や解決策について説明します。

関連する問題