Perl XML::Simple parse simple xml file

本文介绍如何使用Perl的XML::Simple模块解析XML文件,并通过具体示例演示如何配置关键属性,如KeepRoot、ForceContent及ForceArray等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Perl解析xml文件,又不想下载其它模块如Dom,可以用XML::Simple来完成这个任务。

实际工作中用到的几个有用的属性:

1. KeepRoot => 1
生成的hash中显示根节点,否则从下一层节点开始显示。

2. ForceContent => 1
生成的hash中以hash结构保存节点值,如:
nodename => { content => 'value' }
否则显示为:
nodename => 'value'

3. ForceArray => ['nodename1','nodename2']
所有以此开始的节点都用array ref的形式表示,在不使用这个属性的时候,如果是单个节点,则以hash ref的形式表示。如:
<node>
    <test>this is test</test>
</node>

使用属性:
node => [ test => 'this is test' ]

不使用属性:
node => { test => 'this is test' }


其它属性可以参考Perldoc文档。

如下是一个例子,使用以上所有属性。
--------------------------------------------------------------------------------
use Data::Dumper;
use XML::Simple;

my $dict = <<END;
<security>
    <itemaction  action='delete'>
        <test1 test="abc" asf='asdfa'>testing12</test1>
        <abc>
            <test2 test="abc">testing13</test2>
            <test3 test="abc">testing14</test3>                   
        </abc>
    </itemaction>
</security>
END

my $x = XMLin($dict, ForceContent => 1, ForceArray => ['itemaction']);
print Dumper $x

输出:
--------------------------------------------------------------------------------
$VAR1 = {
          'itemaction' => [
                          {
                            'abc' => {
                                     'test3' => {
                                                'test' => 'abc',
                                                'content' => 'testing14'
                                              },
                                     'test2' => {
                                                'test' => 'abc',
                                                'content' => 'testing13'
                                              }
                                   },
                            'test1' => {
                                       'test' => 'abc',
                                       'asf' => 'asdfa',
                                       'content' => 'testing12'
                                     },
                            'action' => 'delete'
                          }
                        ]
        };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值