无法在Windows上安装XML :: LibXML模块

时间:2009-08-26 19:56:57

标签: windows perl xpath cpan xml-libxml

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

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

我按照CPAN网站上有关安装的说明操作,我们需要在安装libxml2之前安装iconvzlibXML::LibXML包装,但它不起作用出。

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

手头的任务:

我在html网页上搜索特定的<dd>标记,该标记非常大(约5000 - 10000)<dd><dt>标记。因此,我正在编写一个与<dd>标记内的内容匹配的脚本,并在相应的(下一个)<dt>标记内提取内容。

我希望我能更清楚一点。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:6)

如果您使用的是ActiveState Perl,则应将ActivePerl 10xx Win32 PPM packages中列出的存储库添加到ppm,然后使用

ppm install 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 = [
          [
            'One',
            '1'
          ],
          [
            'Two',
            '2'
          ]
        ];

答案 1 :(得分: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";
}

答案 2 :(得分:1)

假设您正在使用ActiveState Perl,您可以使XML::LibXML正常工作。 您可以从Randy Kobes' site获取XML :: LibXML,并从zlatkovic.com

获取libxslt / libxml等

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

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

答案 3 :(得分:0)

另请参阅帖子How do I install XML::LibXML for ActivePerl?中的帖子。

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