XML::LibXML to the rescue (again):
#!/usr/bin/perl
use strict;
use warnings;
use File::Find::Rule;
use XML::LibXML;
# get a list of target files
my $input_folder = 'input'; # whatever
my @files = File::Find::Rule->file->in( $input_folder );
# initiate XML parser
my $parser = XML::LibXML->new;
$parser->expand_entities( 0 ); # leave entities alone
# go through target files, collecting elements of interest
my @wanted;
foreach my $file ( @files ) {
# parse XML
my $dom = $parser->parse_file( $file ); # input
# select and store all top level elements
push @wanted, $dom->documentElement->findnodes( './*' );
}
# make a new document
my $new = XML::LibXML::Document->new( '1.0', 'UTF-8' );
# add root element
my $root = XML::LibXML::Element->new( 'xml' );
$new->addChild( $root );
# add the inner elements we've collected
$root->addChild( $_ ) for @wanted;
# output
print $new->toString;