0

我正在尝试解析 XML 文件。Xml 文件可以在@http://pastebin.com/fvuwbrh9找到。我已将此 xml 文件保存为packages.xml.

目标:列出所有在 XML 中被<packagereq>标记包围的名称(我指的是在转储器输出中packagereq属于的名称)。group

我写了下面的脚本称为rpm.pl

#!/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
        }   
    }
}

现在我的脚本进行了一半并打印了包名称,但随后它因以下错误而终止:

Not an ARRAY reference at rpm.pl line 29.

出现上述错误后,脚本不会处理 XML 文件的其余部分并终止。

上面的错误让我相信某处的值$ref->{group}->{$a}->{packagelist}->{packagereq}不是一个数组引用。

我已经尽可能小心地通过 XML 文件(或 Dumper 输出),但发现它packagereq总是指向一个 ARRAY 引用,除非我当然忽略了某些东西,但我对此表示怀疑。

你能否提供一些关于它为什么抱怨的意见Not an ARRAY ref

谢谢。

4

1 回答 1

3

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

my $ref = XMLin ('packages.xml',
   KeyAttr    => [qw( id )],
   ForceArray => [qw( group packagereq ignoredep )],
);
于 2012-10-15T16:00:55.350 回答