我正在使用 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
其中文本元素被解析为两个单独的标记。但有时,根据 html 文件的其他内容,我得到
THE QUICK BROWN
FOX
其中断点不同。这种行为非常令人恼火。我尽力找出问题所在。看起来它取决于整个文件(即,如果我删除文件的其余部分以仅留下该元素,那么就可以了)。但是,我无法确定文件其余部分的哪一部分导致了此问题。想知道是否有人有类似的经历并知道如何解决这个问题?谢谢!!
更新:这种错误行为的发生也不依赖于文件中其他地方的 html 代码的单个部分。我能够在该文本元素之前隔离 html 代码的两个部分 - 当它们都存在时,就会发生此错误。但是,当其中一个单独存在时,这个问题就会消失......我绝对感到困惑和恼火。
HTML::PullParser 是 HTML::Parser 的子类。 HTML::Parser 有一个完整的文本 http://search.cpan.org/perldoc/HTML%3a%3aParser#METHODS属性控制是否尽快吐出文本事件,或者是否缓冲文本直到解析器知道没有更多文本到来。默认是尽快生成文本节点。 A$p->unbroken_text(1)
调用应该使其缓冲:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)