Синтаксический анализ элементов и атрибутов XML с помощью Perl - PullRequest
3 голосов
/ 27 августа 2008

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

Вот что я сделал, если хотел получить время работы для 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 голосов
/ 27 августа 2008

$item - это хэш-выражение, которое выглядит так:

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

Поэтому вы можете получить время выполнения следующим образом:

$RunningTime = $item->{RunningTime}->{content}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...