我想使用XPath提取一些HTML标签和数据,对那些我需要使用XML::LibXML模块。

我试图从CPAN壳安装它,但它不安装。

我跟着从CPAN网站有关安装说明,我们需要安装libxml2之前安装iconvzlibXML::LibXML包装和它没有工作了。

另外,如果是得到我的任务完成任何其他简单的模块,请让我知道。

当前的任务:

我正在寻找一个HTML页面上的特定<dd>标签,它是真正的大(约5000 - 10000)<dd><dt>标签。所以,我写这<dd>标签内的内容相匹配,并获取相应的(下一个)<dt>标签内的内容的脚本。

我希望我能我已经多了几分清晰。任何帮助感激。

有帮助吗?

解决方案

如果您正在使用的ActiveState Perl中,你应该添加在的activeperl 10XX的Win32 PPM包列出的库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'
          ]
        ];

其他提示

如果你只是想XPath查询然后我就写了一个脚本,昨天使用XML :: XPath的XMLParser的::上做一个XML文件XPath查询。

我已经与两个ActiveState的perl的安装,并与窗口草莓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";
}

假设你正在使用的ActiveState Perl中,你可以得到 XML ::的libxml 工作得很好。 您可以从兰迪科贝斯网站,你会得到的libxslt / libxml的等从 zlatkovic.com

我刚安装的libxml第一,然后使用ppm至安装XML ::的libxml。工作得很好。

如果您使用的是草莓的Perl ,CPAN应该为你工作的libxml2的,等是草莓的一部分Perl发行相信

另请参阅我的文章在线程如何安装XML ::的libxml为的activeperl?

讨论一些问题/解决方案,我遇到了使用PPM安装XML-的libxml。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top