使用perl HTML :: Strip从html内容中删除html标记

时间:2013-12-04 12:13:50

标签: html perl

我正在尝试删除html内容的标记而不更改其格式。我已经尝试了HTML :: Strip和HTML :: Restrict,但它没有给出预期的输出。

我需要输出

Heading
point 1
point 2

这是我的代码

use strict;
use warnings;
use HTML::Restrict;
use HTML::Strip;
my $hs = HTML::Strip->new();
my $hr = HTML::Restrict->new();
my $tree = '<div><span itemprop="description">Heading<ul><li>point 1</li><li>point 2</li></ul></span></div>';
my $processed = $hr->process($tree);
my $clean_text = $hs->parse($tree);
print "$clean_text\n\n";
print "$processed\n\n";

但我得到的输出为

Heading point 1 point 2

请给我一些建议。

2 个答案:

答案 0 :(得分:1)

嗯,HTML就是这样 - 格式化文本。一旦你摆脱了HTML标签,你也可以摆脱文本的格式。

以这种方式思考 - 现在,您只想保留格式中的换行符。解析器应该如何知道如何在换行符中转换<ul><li>

如果您希望将来保留文本**bold**的内容,该怎么办?

作为潜在的替代解决方案,请查看pandoc

或者,使用XML::DOM::Lite处理器解析HTML的DOM,并将单个HTML元素转换为其等效的文本文件格式

答案 1 :(得分:1)

这并没有得到你想要的输出,你想要的一般情况(html - &gt;文本格式)可以看看HTML::FormatText

C:\Users\User>perl -MHTML::TreeBuilder -MHTML::FormatText -E "
      my $html = '<div><span itemprop="description">Heading<ul><li>point 1</li><li>point 2</li></ul></span></div>'; 
      my $tree = HTML::TreeBuilder->new_from_content($html); 
      say $tree->format(HTML::FormatText->new);
"

提供输出:

Heading

     * point 1

     * point 2