用perl XML::Simple解析XML文件
转自:?http://blog.csdn.net/perfectpdl/article/details/5936372 在Perl中解析XML的方法最常见的就是使用?XML::DOM?和 XML::Simple了。 XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。 XML::Simple如其名,真的很简单。假设XML内容如下: <opt> <user login="grep" fullname="Gary R Epstein" /> <user login="stty" fullname="Simon T Tyson" > <session pid="12345"/> </user> <text>This is a test.</text> </opt> 那么只需这样写: use XML::Simple; use Data::Dumper; $xml = XMLin('sample.xml'); print Dumper($xml); 就可以轻而易举地将XML解析成一个hash,然后用foreach依次处理即可。 ? $VAR1 = { 'text' => 'This is a test.','user' => [ { 'fullname' => 'Gary R Epstein','login' => 'grep' },{ 'session' => { 'pid' => '12345' },'fullname' => 'Simon T Tyson','login' => 'stty' } ] }; 可以发现如下规律:
一个问题是,对单个元素和多个重复元素的处理结果不一致,就会导致foreach处理时比较麻烦(需要区分是标量还是数组引用),如上面的 text 和 user 的值。解决方法是添加选项 ForceArray => 1,就可以强制单个元素也放到数组引用中。 $xml = XMLin('sample.xml',ForceArray => 1); print Dumper($xml); 运行结果(部分): $VAR1 = { 'text' => [ 'This is a test.' ],'user' => [ ...... 另一个问题是,如果你的元素属性中包含id、name或key,那么元素就不再放到数组引用中,而是放到 hash引用中。比如下面的XML,注意与上面的结果的区别: <opt> <user id="grep" fullname="Gary R Epstein" /> <user id="stty" fullname="Simon T Tyson"> <session pid="12345"/> </user> <text>This is a test.</text> </opt> user的内容不再是数组引用,而是hash引用,而id='grep'也变成了key存在。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |