用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' ????????????????????????? } ??????????????????????? ] ??????? };