我输入的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标签。
答案 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()
函数来检索哈希的键,而不是将它们放在一个单独的数组中。