use XML::Twig; # at most one div will be loaded in memory my $twig=XML::Twig->new( twig_handlers => { channel => sub { my( $node )= @_; my( $id )= $node->{'att'}->{id}; my( $chan )= $node->{'att'}->{chan}; my( $sign )= $node->text; say qq(UPDATE channel SET channum="$chan",xmltvid="$id" WHERE callsign="$sign"); $node->purge; }, }, ); $twig->parsefile( 'my_big.xml');