3

私の入力xmlファイルは次のとおりです。

<?xml version='1.0'?>
<warnings>
 <IDA>
  <file>filea</file>
  <path>patha</path>
 </IDA>

 <IDA>
  <file>fileaa</file>
  <path>pathaa</path>
 </IDA>

 <IDB>
  <file>fileb</file>
  <path>pathb</path>
 </IDB>

</warnings>

私はこのファイルを次のように読んでいます:

my @IDs = ("IDA", "IDB");
my $data = $xml->XMLin("xmlfile.xml");
foreach (@IDs)
{
 foreach $id (@{$data->{$_}})
 {
   print $id->{path}."\n";
 }
}

スクリプトを実行すると、次のエラーが表示されます。

Not an ARRAY reference at ./waiver.pl line 18.

(18 行目は 2 番目の foreach ループです)

EDIT IDAタグが重複しています。

4

1 に答える 1

5

{$data->{$_}IDA タグが 1 つしかなく、配列が作成されないため、有効な配列参照ではありません。XMLin で使用ForceArrayして、タグが 1 つしかない場合でも、すべてのタグを強制的に配列にすることができます。

my $data = $xml->XMLin("xmlfile.xml", ForceArray => 1);

編集:IDBタグでエラーが発生しています...

ref()または、配列またはハッシュ参照であるかどうかを確認するために使用できます。

if (ref({$data->{$_}) eq 'ARRAY')
{
    foreach $id (@{$data->{$_}})
    {
        etc...
    }
}

PS: またkeys()、ハッシュのキーを別の配列に入れるのではなく、関数を使用して取得することをお勧めします。

于 2012-06-01T20:41:30.317 に答える