Hallo,
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.
Ich habe das mit splice und delete probiert, komme aber zu keinem Ergebnis.
Hier das XML:
<?xml version="1.0" encoding="UTF-8"?>
<datas>
<data id="1">
<page>1</page>
</data>
<data id="2">
<page>2</page>
<data id="2.1">
<page>2</page>
<data id="2.1.1">
<page>2</page>
</data>
</data>
</data>
</datas>
Und hier das Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
use XML::Simple;
use Data::Dumper;
my $xml = new XML::Simple;
my $data = $xml->XMLin("data.xml", KeyAttr => [], ForceArray => 1);
my @todos = ();
push @todos, { data => $_ } for @{$data->{data}};
while (@todos) {
my $todo = pop @todos;
if ($todo->{data}{id} =~ /^2$/){
print "delete\n";
delete ($todo->{data});
print Dumper $todo;
next;
}
}
XMLout($data, OutputFile => 'out.xml', rootname => 'items', XMLDecl => '<?xml version="1.0" encoding="UTF-8"?>');
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.
Danke
Guenni