Not sure about XML::Twig but here's how I would do it with XML::LibXML:
#!/usr/bin/env perl
use warnings;
use strict;
use XML::LibXML;
my $file = shift || die "usage $0 <xmlfile>\n";
my $parser = XML::LibXML->new();
my $dom = $parser->parse_file( $file );
my $doc = $dom->documentElement();
my @rules = $doc->findnodes( '/policy/policyrules/Rule' );
my $newdom = XML::LibXML::Document->new( '1.0', 'UTF-8' );
my $newroot = $dom->createElement( 'policy' );
$newroot->setAttribute( 'name', 'Cur_policy' );
$newroot->setAttribute( 'version', '3.2.1' );
$newdom->setDocumentElement( $newroot );
foreach my $rule ( @rules ) {
$newroot->appendChild( $rule );
}
print $newdom->toString(1);
update: Doh! ... no need for a new document:
#!/usr/bin/env perl
use warnings;
use strict;
use XML::LibXML;
my $file = shift || die "usage $0 <xmlfile>\n";
my $parser = XML::LibXML->new();
my $dom = $parser->parse_file( $file );
my $doc = $dom->documentElement();
my @rules = $doc->findnodes( '/policy/policyrules/Rule' );
my $parent = $rules[0]->parentNode->parentNode;
$parent->removeChildNodes();
$parent->appendChild( $_ ) foreach @rules;
print $dom->toString(1);