提问人:user1000219 提问时间:12/5/2017 更新时间:12/6/2017 访问量:57
在 Perl 的 HTML 块中添加我自己的标签
Adding my own tags inside HTML blocks in Perl
问:
有没有办法接收 html 页面、查找块并用我自己的字符将文本括起来?
例如,给定以下 html:
<html>
<head>
<title>Appleseed Farm</title>
</html>
<body>
<table>
<tr>
<td>Col1</td>
<td>Col2</td>
<td><img src="blah/blah.jpg"></td>
<td></td>
</tr>
</table>
<div>Some random text</div>
<p>Random image of the day: <img src="random.jpg"></p>
</body>
</html>
在文本周围使用我的“@”标签变成以下内容:
<html>
<head>
<title>@Appleseed Farm@</title>
</html>
<body>
<table>
<tr>
<td>@Col1@</td>
<td>@Col2@</td>
<td><img src="blah/blah.jpg"></td>
<td></td>
</tr>
</table>
<div>@Some random text@</div>
<p>@Random image of the day:@ <img src="random.jpg"></p>
</body>
</html>
答:
0赞
user1000219
12/6/2017
#1
对不起,这个问题不好。在浏览了 HTML::Element 页面后,我确实弄清楚了。
use strict;
use warnings;
use HTML::TreeBuilder;
use feature ':5.10';
my $root = HTML::TreeBuilder->new_from_file(\*DATA);
$root->elementify;
for my $e ($root->look_down (
sub {
my $tag = $_[0]->tag();
grep( /^$tag$/, qw(td div p title span) )
}
))
{
#Do an in-place replacement
foreach my $item_r ($e->content_refs_list) {
next if ref $$item_r;
$$item_r =~ s/^(.+)$/\@$1\@/g;
}
}
say $root->as_HTML (undef, " ", {});
__DATA__
<html>
<head>
<title>Appleseed Farm</title>
</html>
<body>
<table>
<tr>
<td>Col1</td>
<td>Col2</td>
<td><img src="blah/blah.jpg">Col 3</td>
<td>cat</td>
</tr>
</table>
<div>Some random text</div>
<p>Random image of the day: <img src="random.jpg"></p>
</body>
评论