如何使用Perl在XML中查找和替换文本?

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文件?

Sch*_*ern 8

假设您的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)