我试图处理项目(在这种情况下,图像)的XML列表并迭代每个。我不是很了解Perl或哈希,但是我找到了一些解释和例子(这里有很多),并写了一些似乎可行的东西。 XML是一个元素列表,每个元素都包含一个唯一的'id'属性。解析和遍历每个条目具有多个属性的XML结构
我正在使用来自XML :: Simple的XMLin来解析XML。
当列表包含多个元素时,它通过'id'进行迭代。但是,似乎只有一个时,它会变得困惑,并将该元素的每个属性视为自己的值,这会导致运行时错误。
而“严格裁判”使用
我猜测,问题是,哈希键不说“不能用字符串(“0”)作为HASH裁判ID'是唯一的密钥,至少当只有一个条目时。所以我添加了代码来转储密钥。我还添加了一行以打印$image
在foreach
循环中的内容。在休息的情况下,行print "In loop; image ID=$image\n";
显示In loop; image ID=Serial
由于Serial
是一个属性在id
相同的水平,我猜这是问题(不正确使用id
作为关键)。
这里是我的代码:
下面是打破它一个示例XML文件:
<?xml version="1.0" encoding="utf-8"?>
<rsp stat="ok">
<method>images.get</method>
<Images>
<Image id="123" Key="xyz" Type="Album" Caption="Room 5083" FileName="MVI_2838.AVI" Format="MP4" Height="480" Keywords="China; Suite" LastUpdated="2014-04-19 11:49:45" Position="1" Serial="0" Size="116033" Width="640" Date="2014-04-19 11:46:24" Hidden="0" MD5Sum="6151e20053eeda87c688f8becae0d402" Watermark="0">
<Album id="345" Key="zzy" />
</Image>
</Images>
</rsp>
这里倾倒全$ album_data结果:
$VAR1 = {
'method' => 'images.get',
'Images' => {
'Image' => {
'Serial' => '0',
'Format' => 'MP4',
'Keywords' => 'China; Suite',
'Type' => 'Album',
'Size' => '116033',
'MD5Sum' => '6151e20053eeda87c688f8becae0d402',
'id' => '123',
'Key' => 'xyz',
'LastUpdated' => '2014-04-19 11:49:45',
'Album' => {
'id' => '345',
'Key' => 'zzy'
},
'Position' => '1',
'Height' => '480',
'Date' => '2014-04-19 11:46:24',
'Caption' => 'Room 5083',
'FileName' => 'MVI_2838.AVI',
'Hidden' => '0',
'Width' => '640',
'Watermark' => '0',
}
},
'stat' => 'ok'
};
这里的转储密钥的结果%{$ album_data - > {Images} - > {Image}}构造:
$VAR1 = 'Serial';
$VAR2 = 'Format';
$VAR3 = 'Keywords';
$VAR5 = 'Type';
$VAR6 = 'Size';
$VAR7 = 'MD5Sum';
$VAR9 = 'id';
$VAR10 = 'Key';
$VAR11 = 'LastUpdated';
$VAR12 = 'Album';
$VAR14 = 'Position';
$VAR15 = 'Height';
$VAR16 = 'Date';
$VAR17 = 'Caption';
$VAR19 = 'FileName';
$VAR20 = 'Hidden';
$VAR23 = 'Width';
$VAR24 = 'Watermark';
$VAR27 = 'Duration';