如何在Perl中根据HTML标记的类替换它们?
我需要使用Perl替换HTML中的一些标记: 我有这个:如何在Perl中根据HTML标记的类替换它们?,html,perl,Html,Perl,我需要使用Perl替换HTML中的一些标记: 我有这个: <span class="a">text</span><span class="a">text</span><span id="b">text</span> 我尝试使用,但没有成功。我将使用HTML::Tree解析HTML,然后找到具有所需属性的节点,对其进行更改,然后输出新的树,该树将具有所需的更改。我将使用HTML::Tree解析HTML,然后找到具有所需属性的
<span class="a">text</span><span class="a">text</span><span id="b">text</span>
我尝试使用,但没有成功。我将使用
HTML::Tree
解析HTML,然后找到具有所需属性的节点,对其进行更改,然后输出新的树,该树将具有所需的更改。我将使用HTML::Tree
解析HTML,然后找到具有所需属性的节点,更改它们,然后输出新的树,该树将包含所需的更改。以下是如何使用HTML::TreeBuilder:
use strict;
use warnings;
use HTML::TreeBuilder;
my $html_string = '<span class="a">text</span><span class="a">text</span><span id="b">text</span>';
my $root = HTML::TreeBuilder->new_from_content($html_string);
$root->elementify; # Make $root into an HTML::Element object;
for my $e ( $root->look_down( _tag => 'span', class => 'a' ) ) {
$e->tag( 'b' );
$e->attr( class => undef );
}
print $root->as_HTML;
使用严格;
使用警告;
使用HTML::TreeBuilder;
我的$html_字符串='textText';
my$root=HTML::TreeBuilder->new\u from\u content($HTML\u string);
$root->elementify;#使$root成为HTML::Element对象;
对于我的$e($root->look_down(_tag=>'span',class=>'a')){
$e->tag('b');
$e->attr(类=>undef);
}
打印$root->as_HTML;
以下是如何使用HTML::TreeBuilder:
use strict;
use warnings;
use HTML::TreeBuilder;
my $html_string = '<span class="a">text</span><span class="a">text</span><span id="b">text</span>';
my $root = HTML::TreeBuilder->new_from_content($html_string);
$root->elementify; # Make $root into an HTML::Element object;
for my $e ( $root->look_down( _tag => 'span', class => 'a' ) ) {
$e->tag( 'b' );
$e->attr( class => undef );
}
print $root->as_HTML;
使用严格;
使用警告;
使用HTML::TreeBuilder;
我的$html_字符串='textText';
my$root=HTML::TreeBuilder->new\u from\u content($HTML\u string);
$root->elementify;#使$root成为HTML::Element对象;
对于我的$e($root->look_down(_tag=>'span',class=>'a')){
$e->tag('b');
$e->attr(类=>undef);
}
打印$root->as_HTML;
使用以下内容的示例:
#/usr/bin/perl
使用警告;
严格使用;
使用HTML::解析器;
my$p=HTML::Parser->new(api\U版本=>3,
开始\u h=>[\&start,“标记名、属性、文本、跳过的\u文本”],
结束\u h=>[\&end,“标记名,文本,跳过的\u文本”],
);
$p->parse_文件(\*数据);
我的@switch\u span\u end;
次级起动{
我的($tag、$attr、$text、$skipped)=@;
跳过打印$;
除非($tageq'span'&($attr->{class}| |“”)eq“a”){
打印$text;
返回;
}
按下@switch\u span\u end=>1;
打印“”;
}
副端{
我的($tag,$text,$skipped)=@;
跳过打印$;
如果(@switch\u span\u end&&$tag eq“span”){
打印“”;
开关端的弹出按钮;
}
否则{
打印$text;
}
}
__资料__
文本文本文本
输出:
<b>text</b><b>text</b><span id="b">text</span>
text示例使用:
#/usr/bin/perl
使用警告;
严格使用;
使用HTML::解析器;
my$p=HTML::Parser->new(api\U版本=>3,
开始\u h=>[\&start,“标记名、属性、文本、跳过的\u文本”],
结束\u h=>[\&end,“标记名,文本,跳过的\u文本”],
);
$p->parse_文件(\*数据);
我的@switch\u span\u end;
次级起动{
我的($tag、$attr、$text、$skipped)=@;
跳过打印$;
除非($tageq'span'&($attr->{class}| |“”)eq“a”){
打印$text;
返回;
}
按下@switch\u span\u end=>1;
打印“”;
}
副端{
我的($tag,$text,$skipped)=@;
跳过打印$;
如果(@switch\u span\u end&&$tag eq“span”){
打印“”;
开关端的弹出按钮;
}
否则{
打印$text;
}
}
__资料__
文本文本文本
输出:
<b>text</b><b>text</b><span id="b">text</span>
TextWell,使用HTML::Manipular不起作用怎么办?HTML::Manipular::replace无法使用class属性(仅使用ID)找到元素,并且它不允许更改标记,仅允许更改属性。如果您在文件中读取数据,则如何准确获取数据?这并不重要。有时我读文件,有时读字符串。谢谢大家!!!stackoverflow,你真是太棒了。那么,使用HTML::Manipular怎么办?HTML::Manipular::replace无法找到使用类属性(仅使用ID)的元素,并且它不允许更改标记,只允许更改属性。如果你在文件中读取数据,那么具体如何获取数据?这并不重要。有时我读文件,有时读字符串。谢谢大家!!!stackoverflow和你是惊人的。谢谢,我是一个低级用户。。。还有其他更简单的选择吗?如果你想成为一个低级用户,当然,可能有更简单、更糟糕的快捷方式。我可以向您解释如何使用正则表达式进行所需的特定更改,因为使用正则表达式很容易做到这一点。但是我鼓励你抓住这个机会,以一种嵌套标记不会混淆简单方法的方式来解决以编程方式修改HTML的一般问题。谢谢,我是一个低级用户。。。还有其他更简单的选择吗?如果你想成为一个低级用户,当然,可能有更简单、更糟糕的快捷方式。我可以向您解释如何使用正则表达式进行所需的特定更改,因为使用正则表达式很容易做到这一点。但我鼓励您抓住这个机会,以一种嵌套标记不会混淆简单方法的方式以编程方式修改HTML的一般问题。感谢您提供了我懒得编写的示例。感谢您提供了我懒得编写的示例。感谢您提供了我懒得编写的示例。。。这很酷。。。但我更倾向于使用HTML::TreeBuilder,因为它更清晰。谢谢。。。这很酷。。。但我倾向于使用HTML::TreeBuilder,因为它更清晰。