Perl xml简单用于解析具有相同名称的节点
发布时间:2020-12-16 06:28:03 所属栏目:大数据 来源:网络整理
导读:我有以下xml文件 ?xml version="1.0"?!DOCTYPE pathway SYSTEM "http://www.kegg.jp/kegg/xml/KGML_v0.7.1_.dtd"pathway name="path:ko01200" org="ko" entry id="1" graphics name="one" type="circle" / /entry entry id="7" graphics name="one" type="re
我有以下xml文件
<?xml version="1.0"?> <!DOCTYPE pathway SYSTEM "http://www.kegg.jp/kegg/xml/KGML_v0.7.1_.dtd"> <pathway name="path:ko01200" org="ko" > <entry id="1" > <graphics name="one" type="circle" /> </entry> <entry id="7" > <graphics name="one" type="rectangle" /> <graphics name="two" type="rectangle"/> </entry> </pathway> 我厌倦了使用xml简单解析它与下面的代码我被卡住,因为其中一个节点有2个图形元素.所以它抱怨.我假设我必须有另一个foreach循环的图形元素,但我不知道如何继续. use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml=new XML::Simple; my $data=$xml->XMLin("file.xml",KeyAttr => ['id']); print Dumper($data); foreach my $entry ( keys %{$data->{entry}} ) { print $data->{entry}->{$entry}->{graphics}->{type}."n"; } 这是代码结果 $VAR1 = { 'entry' => { '1' => { 'graphics' => { 'name' => 'one...','type' => 'circle' } },'7' => { 'graphics' => [ { 'name' => 'one','type' => 'rectangle' },{ 'name' => 'two','type' => 'rectangle' } ] } },'org' => 'ko','name' => 'path:ko01200' }; circle Not a HASH reference at stack.pl line 12. 解决方法
XML :: Simple缺乏一致性,因为用户可以启用
strict mode,因此图形节点有时是哈希,有时是数组,具体取决于子元素的数量.
for my $entry ( keys %{$data->{entry}} ) { my $graphics = $data->{entry}{$entry}{graphics}; $graphics = [ $graphics ] if ref $graphics eq "HASH"; print "$_->{type}n" for @$graphics; } 有更好的XML解析模块,请查看XML::LibXML 或者@RobEarl建议使用ForceArray参数: XMLin("file.xml",KeyAttr => ['id'],ForceArray => [ 'graphics' ]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |