Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中根据HTML标记的类替换它们?_Html_Perl - Fatal编程技术网

如何在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,然后找到具有所需属性的

我需要使用Perl替换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,因为它更清晰。