我正在尝试删除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
请给我一些建议。
答案 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