Here's an example using
XML::Rules. The only tricky part is the DOCTYPE handler, which I'm not totally sure about, but it works for your example:
use XML::Rules;
use Data::Dumper;
my $xml = <<XML;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Automation Suite" verbose="1" parallel="false">
<test name="Configuration Restore Test Suite">
<classes>
<class name="com.qa.testsuite.ConfigurationRestoreTests" />
</classes>
</test>
<test name="Import Test Suite">
<classes>
<class name="com.qa.testsuite.ImportTests" />
</classes>
</test>
</suite>
XML
my @rules = (
'^test' => sub { $_[1]->{name} eq 'Import Test Suite' },
);
my $xr = XML::Rules->new(
style => 'filter',
rules => \@rules,
handlers => { Doctype => sub {
my (undef, $name, $sysid) = @_;
print qq(<!DOCTYPE $name SYSTEM "$sysid">\n);
}},
);