首页 > 解决方案 > 使用 HTML::PullParser 获取属性值

问题描述

我编写了一段 Perl 代码来解析 HTML 文件并列出其标签及其属性:

my $lo_parser = HTML::PullParser->new(
    file => $gs_html_doc,
    start => 'event, tagname, @attr',
    ) or die "Error: $!";
$lo_parser->unbroken_text(1);

while (my $iY_token = $lo_parser->get_token)
{
    my $ls_event = $iY_token->[0]; # always "start"
    my $ls_name = $iY_token->[1];
    my @ly_attr = $iY_token->[2];

    print "$ls_name:\n";
    foreach (0 .. $#ly_attr)
    {
        print "- $ly_attr[$_]\n";
    }
    print "\n";
}

它工作正常,但我不知道如何获取不同属性的值。我发现的有关 HTML::PullParser 的网站都没有给我答案。

请问有人可以帮忙吗?

提前谢谢了。

标签: perlparsingperl-module

解决方案


正如评论中所说,当使用“@attr”声明时,我没有找到使解析器工作的解决方案。

然而,通过稍微不同的方法,我终于得到了我想要的。

my $lo_parser = HTML::PullParser->new(
    file => $gs_html_doc,
    start => 'event, tagname, attr',
    ) or die "Error: $!";
$lo_parser->unbroken_text(1);

while (my $iY_token = $lo_parser->get_token)
{
    my $ls_event = $iY_token->[0]; # always "start"
    my $ls_name = $iY_token->[1];
    my $lH_attr = $iY_token->[2];

    print "$ls_name:\n";
    foreach (keys %{$lH_attr})
    {
        print "- $_ = $lH_attr->{$_} = \n";
    }
    print "\n";
}

推荐阅读