为什么我用Perl XML :: Simple得到这个“不是数组引用”?

时间:2012-06-01 20:26:39

标签: xml perl xml-parsing

我输入的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标签。

1 个答案:

答案 0 :(得分:5)

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

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

编辑:现在它正在使用IDB标记给出错误...

或者,您可以使用ref()检查它是数组还是哈希引用:

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

PS:我也建议使用keys()函数来检索哈希的键,而不是将它们放在一个单独的数组中。