繁体   English   中英

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

[英]Remove html tag from an html content using perl HTML::Strip

我正在尝试删除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

请给我一些建议。

好吧,HTML就是这样做的-格式化文本。 一旦摆脱了HTML标记,就也摆脱了文本格式。

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

如果您以后希望保留文本的**bold**怎么办?

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

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

这并没有完全得到所需的输出,对于所需的一般情况(html->文本格式),您可以查看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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM