Perl中的Prettify / Beautify HTML

时间:2015-03-28 10:36:08

标签: perl

我有一些HTML输出存在于一个变量中,我想要Prettify / Beautify但是很难理解我的网页搜索结果。

我发现的大多数选项,如PerlTidy(甚至不确定它是一个正确的选项)似乎都假设HTML在一个文件中但在我的情况下,它已经放在一个Perl脚本中并存储在一个变量,我只是想通过删除多余的换行符和缩进来解决这个问题,然后在发送到输出之前将其保存到另一个变量。

寻找符合

的内容
$output= SomePerlModule::Prettify($HTML);

我希望可以将其添加到我现有的脚本中。

如果它还可以删除孤立的结束标记,则会获得奖励。基本上,我有一些结束标记,例如没有开始标记,虽然浏览器似乎能够处理这个,但最好将它们剥离出来。

有这样的模块吗?

2 个答案:

答案 0 :(得分:3)

HTML::Tidy正是如此:

#!/usr/bin/perl
use strict;
use warnings;

use HTML::Tidy;

my $str = '<div><p>Text<h2>Heading</h2>';
my $tidy = 'HTML::Tidy'->new;
print $tidy->clean($str);

<强>输出

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content="tidyp for Linux (v1.04), see www.w3.org">
<title></title>
</head>
<body>
<div>
<p>Text</p>
<h2>Heading</h2>
</div>
</body>
</html>

答案 1 :(得分:2)

我建议您首先生成有效的HTML。拿出正确的模板,然后填写。

相反,看起来您在Perl中使用print语句来生成HTML。有一天,后期处理会做错事,你不知道在哪里以及如何修复它会出错。

填写模板可以避免所有这些问题。任何模板模块都优于print HTML,但Template.pm有一个很好的生态系统。

鉴于HTML不在您的控制之下,如果HTML::PrettyPrinter为您的HTML生成正确的语法树,您可能还需要考虑HTML::TreeBuilder