1

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

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

インストールに関する CPAN サイトの指示に従いました。インストールする前libxml2iconvzlibラッパーをインストールする必要がありますが、XML::LibXMLうまくいきませんでした。

また、私の仕事を成し遂げるもっと簡単なモジュールが他にあれば、私に知らせてください。

当面のタスク:

<dd>本当に大きい (約 5000 ~ 10000)<dd>とタグの html ページで特定のタグを検索してい<dt>ます。<dd>そのため、タグ内のコンテンツに一致し、対応する (次の)タグ内のコンテンツを取得するスクリプトを作成しています<dt>

もう少しはっきりしていればよかったのに。どんな助けでも大歓迎です。

4

4 に答える 4

6

ActiveState Perl を使用している場合は、ActivePerl 10xx Win32 PPM パッケージにリストされているリポジトリを追加してppmから使用する必要があります。

ppm インストール XML::LibXML

HTML を XML として解析しようとするのは、一般的に楽しい作業ではありません。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 = [
          [
            '1'、
            '1'
          ]、
          [
            '二'、
            '2'
          ]
        ];
于 2009-08-27T14:22:00.197 に答える
1

ActiveState Perl を使用していると仮定すると、XML::LibXMLを問題なく動作させることができます。XML::LibXML はRandy Kobes のサイトから入手でき、libxslt/libxml などはzlatkovic.comから入手できます。

最初に libxml をインストールしてから、ppm を使用して XML::LibXML をインストールします。うまく動作します。

Strawberry Perlを使用している場合、libxml2 などは Strawberry Perl ディストリビューションの一部であるため、CPAN が機能するはずです。

于 2009-08-26T23:12:23.867 に答える
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";
}
于 2009-08-26T21:07:22.057 に答える
0

ActivePerl 用の XML:: LibXMLをインストールするにはどうすればよいですか? .

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

于 2012-01-17T19:49:41.890 に答える