对于Perl,我是HTML::Parser
的新手。
我正在尝试解析网页,然后搜索特定字符串,例如pass
或fail
。我怎么可能这样做。
由于框架问题,我必须使用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";
}
答案 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