#!/usr/bin/perl use strict; use warnings; use XML::Twig; my $file = 'test.xml'; my %seen; my $twig = XML::Twig->new( # twig_roots macht aus jedem -Block # ein eigenständiges "Objekt" # Für jeden Block wird die Methode "produkt" aufgerufen twig_roots => { Produkt => \&produkt, }, # gib einfach alles außerhalb der Produkt-Blöcke # aus. twig_print_outside_roots => 1, )->parsefile( $file ); sub produkt { my ($t,$elt) = @_; # hole die ProduktNummer my ($nr) = $elt->children( 'Produkt_Nummer' ); my $id = $nr->text; if ( $seen{$id}++ ) { # wenn es einen Block für die ProduktNummer bereits # gibt, dann lösche den aktuellen Block... $elt->delete; } else { # ansonsten gib ihn aus $elt->print; } # gib den Speicher frei $t->purge; }