2008-08-27 16 views
3

したがって、Amazon Web Servicesから返された結果を解析するperlを書きました。私はXML::Simpleパッケージを使用しています。ほとんどの場合、要素を取り除くとすべてが機能しました。しかし、私が遭遇した問題は、要素にも属性があったときでした。次に、アイテムがハッシュであるというエラーが表示されます。PerlでXML要素と属性を解析する

DVDのランニングタイムを取得したい場合は、次のようにします。このワンオフアイテムの特定の情報を保持するアイテムを作成しました。

// XML 
<ProductGroup>DVD</ProductGroup> 
<RunningTime Units="minutes">90</RunningTime> 

// Perl to parse XML 

my $item = $xml->XMLin($content, KeyAttr => { Item => 'ASIN'}, ForceArray => ['ASIN']);  

$ProductGroup = $item->{Items}->{Item}->{ItemAttributes}->{ProductGroup}; 

if(ref($item->{Items}->{Item}->{ItemAttributes}->{RunningTime}) eq 'HASH'){ 
    $RunningTimeXML = $xml->XMLin($content, KeyAttr => { Item => 'ASIN'}, NoAttr => 1); 
    $RunningTime = $RunningTimeXML->{Items}->{Item}->{ItemAttributes}->{RunningTime}; 
} 

1つのアイテムから要素と属性の両方にアクセスできる方法はありますか?

答えて

5

$itemは次のようになりますハッシュリファレンスです:

$item = { 
    'RunningTime' => {'content' => '90', 'Units' => 'minutes'}, 
    'ProductGroup' => 'DVD' 
}; 

したがって、あなたがこのような実行中の時間を取得することができます:

$RunningTime = $item->{RunningTime}->{content}