Parsen von XML-Elementen und -Attributen mit Perl
-
09-06-2019 - |
Frage
Also habe ich ein Perl geschrieben, das die von der zurückgegebenen Ergebnisse analysiert Amazon Web Services.Ich verwende das XML::Simple
Paket.Im Großen und Ganzen funktionierte alles, als ich ein Element herauszog.Das Problem, auf das ich stieß, war jedoch, dass ein Element auch ein Attribut hatte.Dann erhalte ich die Fehlermeldung, dass es sich bei dem Element um einen Hash handelt.
Folgendes habe ich getan, wenn ich die Laufzeit einer DVD erhalten wollte:Ich habe gerade einen Artikel erstellt, der die spezifischen Informationen für diesen einmaligen Artikel enthält.
// 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};
}
Gibt es eine Möglichkeit, von einem Element aus auf Elemente und Attribute zuzugreifen?
Lösung
$item
ist ein Hashref, der so aussieht:
$item = {
'RunningTime' => {'content' => '90', 'Units' => 'minutes'},
'ProductGroup' => 'DVD'
};
Daher können Sie die Laufzeit wie folgt ermitteln:
$RunningTime = $item->{RunningTime}->{content}