use strict; use warnings; use XML::Parser; use XML::Twig; my $twig=XML::Twig->new( twig_roots=>{ indd_document=>\&update_root, 'document/header'=>\&update_header, }, ); $twig->parsefile( $xmlfile); open(FH,">output.xml") or die "cannot open output.xml: $!"; my $temp = $twig->toString; print FH $temp; close (FH); $twig->purge; } sub update_root { my ($t, $root) = @_; $root->insert_new_elt(first_child => header => {type=>"layout"}); $root->set_tag( 'document'); } sub update_header { my ($t, $header)=@_; $header->insert_new_elt(first_child => headerfield => {type=>"layout"}); }