The problem is that XML::DOM is a maze of objects. And each node object can only have one parent. So you first stick the <record> object in place of the first Thammasat and then MOVE the object in place of the second. You'd have to create a brand new $ritem each time you want to replace the original.
To tell the truth, you'd most likely do better if you dumped the module and used a different. I'm surprised mirod did not already suggest his XML::Twig, anyway I'll suggest my XML::Rules:
use strict;
use XML::Rules;
my $link = "Thammasat";
my $rlinks = {
"institute" => ["test"],
"year" => ["test"],
"degree" => ["test"],
"faculty" => ["test"],
"major" => ["test"],
"gpa" => ["test"],
};
my $parser = XML::Rules->new(
style => 'filter',
ident => ' ',
rules => {
_default => 'raw extended',
record => sub {
return $_[0] => $_[1] unless $_[1]->{':institute'}{_conten
+t} eq $link;
return $_[0] => $rlinks;
}
},
);
$parser->filterfile('employee.xml', 'employee-filtered.xml');
The additional advantage is that this scripts doesn't load the whole file into memory, it parses the file, copies everything outside the <record> tag and only ever remembers that single tag with contents.