Perl で xml ファイルを解析していますが、すべてが 1 つの問題でうまく機能しているようです。同じスキーマのファイルがありますが、パーサーから異なるタイプのデータが返されます。簡単な例を次に示します。
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
<test>
<data1>Hi2</data1>
<data2>Hello2</data2>
</test>
</tests>
ダンプでは、これは次を返します: (test は 2 つのハッシュの配列であることに注意してください)
$VAR1 = {
'test' => [
{
'data2' => 'Hello',
'data1' => 'Hi'
},
{
'data2' => 'Hello2',
'data1' => 'Hi2'
}
]
};
さて、同様のデータセットですが、次のような「テスト」エンティティは 1 つだけです。
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
</tests>
これは同様のデータを返しますが、テスト エンティティが配列ではなく、単一のハッシュであることを除きます。
$VAR1 = {
'test' => {
'data2' => 'Hello',
'data1' => 'Hi'
}
};
私のジレンマは、それが標準であるため、コードがそこに配列を期待していることです。ただし、エンティティが 1 つしかないわずかな可能性で、そのエンティティのハッシュが返されます。私の質問は、ハッシュ エンティティを配列のように扱うにはどうすればよいかということです。またはそれをテストしますか?
現在、配列を取得するための私のコードは次のようになっています。
foreach $test (@{$data->{'tests'}->{'test'}})
{
do something with $test
}
しかし、ハッシュを使用すると、「ARRAY参照ではありません」というエラーが発生します。これが十分な詳細であることを願っています!ありがとう!!!