忽略HTML :: TreeBuilder输出Perl中的文本

|| 我需要忽略或删除所有HTML元素之间的所有文本,以便可以从给定的网页生成空白模板。 我正在使用perl模块HTML :: TreeBuilder和HTML :: Element进行解析。 我已经尝试了文档中提到的ignore_text方法,但是无法提供正确的结果。 我还尝试过将DOMXpath与PHP结合使用来做同样的事情,结果似乎太麻烦了,难以管理。正则表达式可能有效,但对我而言是不得已的方法。 这是我当前代码的一部分,非常基本。底部只是输出到文件。所有代码都起作用,我只需要格式化即可工作,以便生成模板文件。
my $url= \"http://www.example.com\";

my $page = get($url) or die $!;
my $tree = HTML::TreeBuilder->new_from_content($page);

$tree->parse_file($page);

$tree->ignore_text;
$tree->elementify;

open OUTPUT, \"+>\".$body;
my $output = $tree->as_HTML;
print OUTPUT $output;
close OUTPUT;
先谢谢您的帮助! 编辑:我发现了问题-仅当您从物理文件中解析时,忽略文本才有效。我不得不将页面另存为临时文件以进行解析,然后以不带文本的方式输出我想要的方式,然后我只是在底部做了unlink($ tmp)来删除文件。从那以后,我的脚本在读写数据库方面变得越来越复杂,每次我需要创建此临时文件时,都会感到烦恼... 感谢您在下面的回复!     
已邀请:
        你很亲密 看来您需要将
ignore_text
设置为真实值。
$tree->ignore_text(1)
,然后在呼叫
parse_file
之前确定其设定。 抱歉,这有点长,但我希望对您有所帮助。 这是新代码的快速通过,没有示例页面很难测试:
my $tree = HTML::TreeBuilder->new;

$tree->ignore_text(1);
$tree->elementify;
$tree->parse_file( $page );
这是我使用本地文件的快速测试脚本:
use strict;
use warnings;

use HTML::TreeBuilder;

my $page = \'test.html\';
my $tree = HTML::TreeBuilder->new();

$tree->ignore_text(1);
$tree->parse_file($page);
$tree->elementify;

print $tree->as_HTML;
输入
test.html
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
  <title>title text</title>
</head>
<body>
  <h1>Heading 1</h1>
  <p>paragraph text</p>
</body>
</html>
并输出:
<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title></head><body><h1></h1><p></body></html>
祝好运     
        也许您应该使用HTML :: Parser来完成此任务。它可能需要更多代码,但不应太复杂。     

要回复问题请先登录注册