HTML::PullParser 随机拆分文本元素

标签 html perl parsing perl-module

我正在使用 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 有一个 unbroken_text控制它是否尽快吐出文本事件,或者是否缓冲文本直到解析器知道没有更多文本到来的属性。默认是尽快生成文本节点。 $p->unbroken_text(1) 调用应使其成为缓冲 :)

关于HTML::PullParser 随机拆分文本元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069923/

相关文章:

javascript - 图像悬停同时显示所有图像

javascript - 图库不适用于 iPad/移动设备

perl 模式一一匹配并处理

perl - CGI 脚本中的纯文本密码是安全漏洞吗?

c - malloc 在这种情况下做了什么?

HTML 5 视频标签不适用于任何浏览器

javascript - 如何在HTML上打印JavaScript爬取的内容

perl中的正则表达式,匹配换行符和下一行的第一个单词

python - 将 JSON 数据导入为 CSV 格式

Javascript:按数组的第一个字符排序