在Perl中,如何在不更改XML文件格式的情况下更改XML文件中的元素?

我有一个格式的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::Simple提供了一些选项,允许您指定如何将输入转换为Perl数据结构以及如何输出该结构:
#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'b.xml';

my $xml = XMLin(
    $xml_file,KeepRoot => 1,ForceArray => 1,);

$xml->{outer1}->[0]->{inner1}->[1]->{name} = 'Shane Bond';

XMLout(
    $xml,NoAttr => 1,OutputFile => $xml_file,);

如果您做任何有趣的事情,XML::Simple确实会有点毛茸茸,因为它的目的不是成为通用XML库,而是提供一种简单的方法来处理用XML编写的配置文件.

CPAN有过多的XML related modules.除非这是一个你必须处理的一次性问题,否则值得研究一些功能更强大,更适合的模块.

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...