我有一个格式的 XML 文件:
<outer1>
<inner1>
<name>Stonecold</name>
<profession>warrior</profession>
<org>wwf</org>
</inner1>
<inner1>
<name>Shanebond</name>
<profession>Bowler</profession>
<org>newzealand</org>
</inner1>
<inner1>
<name>brain schemidit</name>
<profession>Chairman</profession>
<org>Google</org>
</inner1>
</outer1>
我想将 Shanebond
的值更改为 Shane Bond
。
我使用的是 XML::Simple
,但结果是一个散列。
我想要与输入文件相同的格式。例如:输出文件应如下所示:
<outer1>
<inner1>
<name>Stonecold</name>
<profession>warrior</profession>
<org>wwf</org>
</inner1>
<inner1>
<name>Shane Bond</name>
<profession>Bowler</profession>
<org>newzealand</org>
</inner1>
<inner1>
<name>brain schemidit</name>
<profession>Chairman</profession>
<org>Google</org>
</inner1>
</outer1>
请指教如何做到这一点。
提前致谢。
我希望将输出文件保存在同一目录中,并尽可能使用相同的名称。可能吗?
最佳答案
当涉及到读取或操作 XML 文件时 XML::Twig通常是我希望使用的第一个工具。
起初我认为这对您的要求来说可能有点矫枉过正,但后来我注意到它确实带有一个 parsefile_inplace() 选项:
use strict;
use warnings;
use XML::Twig;
XML::Twig->new(
pretty_print => 'indented',
twig_handlers => {
name => sub {
$_->set_text( 'Shane Bond' )->flush if $_->text eq 'Shanebond'
},
},
)->parsefile_inplace( 'data.xml', 'bak_*' );
注意。如果您不想保留备份文件,请删除第二个参数('bak_*')。
关于xml - 在 Perl 中,如何在不更改 XML 文件格式的情况下更改 XML 文件中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327720/