Pregunta

Entonces escribí algo de Perl que analizaría los resultados devueltos por el Servicios web de Amazon.estoy usando el XML::Simple paquete.En su mayor parte, todo funcionó cuando saqué un elemento.Sin embargo, el problema que encontré fue cuando un elemento también tenía un atributo.Luego aparece un error que indica que el elemento es un Hash.

Esto es lo que hice si quería obtener el tiempo de ejecución de un DVD:Acabo de crear un elemento para contener la información específica de este elemento único.

// 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};
}

¿Hay alguna manera de acceder tanto a elementos como a atributos desde un solo elemento?

¿Fue útil?

Solución

$item es un hashref que se parece a esto:

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

Por lo tanto, puede obtener el tiempo de ejecución de esta manera:

$RunningTime = $item->{RunningTime}->{content}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top