2013-03-08T10:34:51
guenniHallo,
in einem anderen Thread habe ich gelernt (??) wie ich durch verschachtelte Nodes parsen kann.
Inzwischen kann ich diese auch bearbeiten und sortieren.
Jetzt möchte ich gerne noch einzelne dieser Nodes löschen.
my $data = $xml->XMLin("data.xml", KeyAttr => [], ForceArray => 1);
my @todos = ();
push @todos, { data => $_ } for @{$data->{data}};
while (@todos) {
...
delete ($todo->{data});
...
}
print Dumper $data;
Im Dump innerhalb der Schleife kann ich sehen, das der Node mit der "id=2" nach dem delete leer ist ($VAR1 = {};).
Im Dump nach der Ausgabe und in der Ausgabe selbst ist aber alles noch enthalten.
Irgendwie habe ich das ganze Konzept wohl noch nicht verstanden, kann mir vielleicht jemand erläutern wo mein Denkfehler ist.
Ich habe dir den relevanten Perl-Code mal zusammengekürzt. In Kurz:
dein @todo enthält einen neuen, anonymen Hashref mit data => irgendwas_aus_xml. Dann gehst du das Todo durch und löschst aus der neuen Hashref den data-Key.
Das ganze hat natürlich keinen Effekt auf die Variable $data, sondern eben nur auf den neu erzeugten Hash. Das Value zeigt zwar in das $data rein, aber das änderst du ja nicht. Du darfst also nicht die Kopie ändern, sondern musst aus dem eigentlichen Hash den Key löschen.