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 行是第二个 foreach 循环)

编辑 我复制了 IDA 标签。

4

1 回答 1

5

{$data->{$_}不是有效的数组引用,因为您只有一个 IDA 标签,因此没有构建数组。ForceArray即使只有一个,您也可以在 XMLin 中使用来强制每个标签都成为一个数组。

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 回答