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



我正在尝试删除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_textnn";
print "$processednn";

但我得到的输出是

Heading point 1 point 2

请给我一些建议。

这并不能得到您想要的输出,但对于您想要的一般情况(html->text格式),您可以查看html::FormatText。

C:UsersUser>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

好吧,HTML就是这么做的——格式化文本。一旦去掉了HTML标记,也就去掉了文本的格式。

这样想吧——现在,您对只保留格式中的换行符感兴趣。解析器应该如何知道如何在换行符中转换<ul><li>

如果你想在未来保持文本的**bold**性质,该怎么办?

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

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

最新更新