我正在尝试删除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元素转换为等效的文本文件格式