Domanda

Così ho scritto del perl che analizzasse i risultati restituiti dal file Servizi Web di Amazon.Sto usando il XML::Simple pacchetto.Per la maggior parte, tutto ha funzionato quando ho estratto un elemento.Tuttavia, il problema che ho riscontrato era quando un elemento aveva anche un attributo.Quindi ricevo un errore che indica che l'elemento è un Hash.

Ecco cosa ho fatto se volevo ottenere il tempo di esecuzione per un DVD:Ho appena creato un articolo per contenere le informazioni specifiche per questo articolo unico.

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

Esiste un modo per accedere sia agli elementi che agli attributi da un elemento?

È stato utile?

Soluzione

$item è un hashref simile a questo:

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

Pertanto puoi ottenere il tempo di esecuzione in questo modo:

$RunningTime = $item->{RunningTime}->{content}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top