PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl: Hash auslesen



elrond
04-03-2008, 08:37
Hallo allerseits,

nachdem ich nach langer Abstinenz mal wieder Perl unter den Tasten hab, hänge ich an folgendem Problem: Ich lese mit XML::Simple ein Stück Daten aus. Dumpoer liefert mir folgenden output:


$VAR2 = {
'spadef' => {
'spa' => [
{
'teilnahme' => 'MI,SA',
'spielart' => 'lotto',
'bodefno' => '239'
},
{
'teilnahme' => 'SA',
'spielart' => 'gs,spiel77',
'bodefno' => '51'
}
]
},
'preis' => '1387',
'anztipps' => '1',
'name' => 'ClassicRente',
'spielart' => 'lotto,gs,spiel77'
};

ich bin irgendwie nicht in der Lage auf diesen bereich zuzugreifen ???


'spa' => [
{
'teilnahme' => 'MI,SA',
'spielart' => 'lotto',
'bodefno' => '239'
},
{
'teilnahme' => 'SA',
'spielart' => 'gs,spiel77',
'bodefno' => '51'
}
]


Ich hätte am ende gern einen hash, der so aussieht $h{'spa0'}{'teilnahme'}='MI,SA' usw...

falls mir jemand beim rätseln helfen will hier der xml-code:


<root>
<schein name="ClassicRente" anztipps="1" spielart="lotto,gs,spiel77" preis="1387">
<spadef>
<spa teilnahme="MI,SA" bodefno="239" spielart="lotto"/>
<spa teilnahme="SA" bodefno="51" spielart="gs,spiel77"/>
</spadef>
</schein>
</root>


ich lese das so aus einer db und will's halt verarbeiten...

Ich kann natürlich aus sen tagnamen spa0 und spa1 machen, ist aber unsportlich, oder? :cool:

thx schnmal für's nachdenken

reneeb
04-03-2008, 23:01
Wenn Deine Struktur so aussieht:
$VAR2 = {
'spadef' => {
'spa' => [
{
'teilnahme' => 'MI,SA',
'spielart' => 'lotto',
'bodefno' => '239'
},
{
'teilnahme' => 'SA',
'spielart' => 'gs,spiel77',
'bodefno' => '51'
}
]
},
'preis' => '1387',
'anztipps' => '1',
'name' => 'ClassicRente',
'spielart' => 'lotto,gs,spiel77'
};

Dann musst Du das noch "umformen":
my $hashref = ...; # die Struktur von XML::Simple;

my $counter = 0;
for my $spa ( @{ $hashref->{spadef}->{spa} } ){
$hashref->{spadef}->{'spa' . $counter++} = $spa;
}
delete $hashref->{spadef}->{spa};

elrond
05-03-2008, 08:19
thx, klingt gut, ich werde es testen...