1

我正在尝试使用XPath来提取一些 HTML 标签和数据,为此我需要使用XML::LibXML模块。

我尝试从 CPAN shell 安装它,但它没有安装。

我按照 CPAN 站点的说明进行了安装,我们需要在安装libxml2之前安装iconvzlib包装器XML::LibXML,但没有成功。

另外,如果有任何其他更简单的模块可以完成我的任务,请告诉我。

手头的任务:

我正在一个<dd>非常大的 html 页面上搜索一个特定的标签(大约 5000 - 10000)<dd><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'
          ],
          [
            '二',
            '2'
          ]
        ];
于 2009-08-27T14:22:00.197 回答
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 回答
1

假设您使用的是 ActiveState Perl,您可以让XML::LibXML正常工作。您可以从Randy Kobes 的网站获取 XML::LibXML,也可以从zlatkovic.com获取 libxslt/libxml 等

我只是先安装 libxml,然后使用 ppm 安装 XML::LibXML。工作得很好。

如果您使用的是Strawberry Perl,CPAN 应该适合您,因为 libxml2 等是我相信的 Strawberry Perl 发行版的一部分。

于 2009-08-26T23:12:23.867 回答
0

另请参阅我在线程How do I install XML::LibXML for ActivePerl? 中的帖子?.

讨论我在使用 PPM 安装 XML-LibXML 时遇到的一些问题/解决方案。

于 2012-01-17T19:49:41.890 回答