我正在用 Perl 解析 xml 文件,并且在一个问题上似乎一切都很好。我有具有相同架构的文件,但它们从解析器返回不同类型的数据。这是一个简化的示例:
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
<test>
<data1>Hi2</data1>
<data2>Hello2</data2>
</test>
</tests>
在转储中,这将返回以下内容:(注意 test 是一个包含两个哈希的数组)
$VAR1 = {
'test' => [
{
'data2' => 'Hello',
'data1' => 'Hi'
},
{
'data2' => 'Hello2',
'data1' => 'Hi2'
}
]
};
现在,对于一组类似的数据,但只有一个“测试”实体,如下所示:
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
</tests>
这将返回相似的数据,除了测试实体不再是一个数组,而是一个奇异的散列:
$VAR1 = {
'test' => {
'data2' => 'Hello',
'data1' => 'Hi'
}
};
我的困境是我的代码需要一个数组,因为这是常态。但是在只有一个实体的情况下,它会返回该实体的哈希值。我的问题是,我如何处理哈希实体,就好像它是一个数组一样。或者测试一下?
现在我检索数组的代码是这样的:
foreach $test (@{$data->{'tests'}->{'test'}})
{
do something with $test
}
但是使用散列,它会给出一个错误“不是数组引用”。我希望这是足够的细节!谢谢!!!