fix*_*xer 2 xml perl replace find
我的XML文件看起来像这样:
<doc>
<RU1>
<conf>
<prop name="a" val="http://a.org/a.html>
</conf>
</RU1>
<RAU1>
<conf>
<prop name="a" val="http://a.org/a.html>
</conf>
</RAU1>
<RU2>
<conf>
<prop name="a" val="http://a.org/a.html>
</conf>
</RU2>
</doc>
Run Code Online (Sandbox Code Playgroud)
我想替换道具字段的值"a.org",其下具有RU在Perl启动所有父标签,以"b.com".怎么我得到改变为XML文件?
假设您的XML格式正确(事实并非如此),您可以使用许多CPAN模块来完成工作.大多数将涉及解析文档,使用XPath查询找到您的位,并再次打印文档.
这是XML :: Twig的一个例子.我不得不修复XML以使其解析.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new(
twig_handlers => {
'conf/prop' => sub { $_->{att}{val} =~ s/a.org/b.org/; }
},
pretty_print => "indented"
);
$twig->parse(join "", <DATA>);
$twig->print;
__END__
<foo>
<RU1>
<conf>
<prop name="a" val="http://a.org/a.html" />
</conf>
</RU1>
<RAU1>
<conf>
<prop name="a" val="http://a.org/a.html" />
</conf>
</RAU1>
<RU2>
<conf>
<prop name="a" val="http://a.org/a.html" />
</conf>
</RU2>
</foo>
Run Code Online (Sandbox Code Playgroud)