0

XML ファイルを解析しようとしています。Xml ファイルは、@ http://pastebin.com/fvuwbrh9にあります。この xml ファイルを として保存しましpackages.xmlた。

目標<packagereq>: XML 内のタグで囲まれたすべての名前を一覧表示します (ダンパー出力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}上記のエラーにより、 のどこかの値がARRAY 参照ではないと思われます。

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 に答える