2008-08-27 4 views
3

Итак, я написал несколько perl, которые будут анализировать результаты, полученные с Amazon Web Services. Я использую пакет XML::Simple. По большей части все работало, когда я вытаскивал элемент. Однако проблема, с которой я столкнулся, заключалась в том, что элемент имел атрибут. Затем я получаю сообщение об ошибке «Хэш».Разбор XML-элементов и атрибутов с Perl

Вот что я сделал, если бы захотел получить время выполнения для 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}; 
} 

Есть ли способ получить доступ к обоим элементам и атрибутам из одного элемента?

ответ

5

$item является hashref, который выглядит следующим образом:

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

Таким образом, вы можете получить время работы, как это:

$RunningTime = $item->{RunningTime}->{content} 
Смежные вопросы