我正在使用Perl模块HTML::PullParser
。我注意到它有时会随机分割出一个文本元素(据我所知)。
例如,如果我有一个内容为
的html文件test.html
<html>
...
<FONT STYLE="font-family:Times New Roman" SIZE="2">THE QUICK BROWN FOX</FONT>
...
</html>
我的perl代码看起来像
my $html = HTML::PullParser->new(file => 'test.html', text => '"T", text');
while (my $token = $html->get_token) {
print "$$token[1]\n";
}
然后有时我会回来
THE QUICK BROWN FOX # correctly parsed
但有时我会
THE QUICK
BROWN FOX
其中text元素被解析为两个单独的标记。但在其他时候,根据html文件的其他内容,我得到了
THE QUICK BROWN
FOX
断点不同。这种行为非常烦人。我尽力隔离问题。看起来它依赖于整个文件(即如果我删除文件的其余部分只剩下那个元素,那就没关系)。但是,我无法识别文件其余部分导致了什么。想知道是否有人有类似的经历,知道如何解决这个问题? THX !!
更新:此错误行为的发生也不依赖于文件中其他位置的html代码的单个部分。我能够在该文本元素之前隔离两段html代码 - 当它们都存在时,会发生此错误。但当任何一个人在没有另一个人的情况下存在时,这个问题就会消失......我绝对感到困惑和烦恼。
答案 0 :(得分:3)
HTML :: PullParser是HTML :: Parser的子类。 HTML :: Parser有一个unbroken_text属性,可以控制它是否尽快吐出文本事件,或者它是否缓冲文本,直到解析器知道不再有文本出现。默认是尽快生成文本节点。 $p->unbroken_text(1)
调用应该使其缓冲:)