XML :: Simple:解析嵌套的哈希/数组

时间:2012-10-15 15:35:40

标签: perl

我正在尝试解析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的意见。

感谢。

1 个答案:

答案 0 :(得分:3)

XML :: Simple,最复杂的XML解析器。添加以下内容:

my $ref = XMLin ('packages.xml',
   KeyAttr    => [qw( id )],
   ForceArray => [qw( group packagereq ignoredep )],
);