我正在尝试解析XML文件。可以在@ http://pastebin.com/fvuwbrh9找到Xml文件。
我已将此xml文件另存为packages.xml
。
目标:列出XML中<packagereq>
标记所包围的所有名称(我指的是属于packagereq
的{{1}}转储器输出)。
我在下面写了一个名为group
的脚本:
rpm.pl
现在我的脚本走了一半throgh打印包名,但随后它被终止,错误如下:
#!/usr/bin/perl -w
use strict;
use XML::Simple;
use Data::Dumper;
my $ref = XMLin ('packages.xml');
#print Dumper ($ref);
foreach my $a ( keys %{ $ref->{group} } )
{
if ( exists $ref->{group}->{$a}->{packagelist} )
{
foreach my $b ( @{ $ref->{group}->{$a}->{packagelist}->{packagereq} } )
{
print $b->{content}."\n"; ### <<< referring the Dumper out put
}
}
}
在出现上述错误后,脚本不会处理其余的XML文件并终止。
以上错误让我相信Not an ARRAY reference at rpm.pl line 29.
的某个值不是ARRAY参考。
我已经非常谨慎地对待XML文件(或者Dumper输出),但发现$ref->{group}->{$a}->{packagelist}->{packagereq}
始终指向ARRAY引用,除非我当然忽略了某些内容,但我对此表示怀疑。
您能否提供一些关于为什么抱怨packagereq
的意见。
感谢。
答案 0 :(得分:3)
XML :: Simple,最复杂的XML解析器。添加以下内容:
my $ref = XMLin ('packages.xml',
KeyAttr => [qw( id )],
ForceArray => [qw( group packagereq ignoredep )],
);