Perl HTML :: Parser - 在解析的文件中搜索特定字符串

时间:2014-05-22 17:31:03

标签: perl html-parsing

对于Perl,我是HTML::Parser的新手。

我正在尝试解析网页,然后搜索特定字符串,例如passfail。我怎么可能这样做。

由于框架问题,我必须使用HTML::Parser基础库而不是另一个模块。

代码片段

#!/usr/bin/perl
use strict;

# define the subclass
package IdentityParse;

package HTMLStrip;
use base "HTML::Parser";

sub text {
  my ($self, $text) = @_;

  # just print out the original text
  print $text;
}

sub comment {
  my ($self, $comment) = @_;

  # print out original text with comment marker
  #print "hey hey";
}

sub end {
  my ($self, $tag, $origtext) = @_;

  # print out original text
  #print $origtext;
}

#my $p = new IdentityParse;
my $p    = new HTMLStrip;
my @file = $p->parse_file("testcase1.html");

if ($p->parse_file("testcase1.html") =~ "PASS") {
  print " The test passed \n";
}
else {
  print "\nthe test failed \n";
}

1 个答案:

答案 0 :(得分:2)

如果你想要的只是从XML中删除标签而只留下文本内容,那么你就会为自己制造太难的东西。您所需要的只是一个文本处理程序子例程,它将每个文本节点连接到一个全局标量。

看起来像这样。我编辑了最后一个字符串,将所有空格和换行符更改为单个空格;否则布局缩进中会有批次空间。

use strict;
use warnings;

use HTML::Parser;

my $parser = HTML::Parser->new( text_h => [\&text, 'dtext'] );

my $text_content;

sub text {
  $text_content .= shift;
}

$parser->parse_file(*DATA);
$text_content =~ s/\s+/ /g;
print $text_content;

__DATA__
<root>
  <item>
    Item 1
    status failed
  </item>
  <item>
    Item 2
    status passed
  </item>
  <item>
    Item 3
    status failed
  </item>
</root>

<强>输出

 Item 1 status failed Item 2 status passed Item 3 status failed