####
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new();
# this call should probably be wrapped in an eval (or Try::Tiny) or at least
# tested for a valid object being returned.
my $doc = $parser->parse_file('student.xml');
my $query = '//student';
for my $ele ($doc->findnodes($query)){
my $attr_text=$ele->getAttribute('id');
if($attr_text eq '1001'){
my $new_ele=$doc->createElement('student');
$new_ele->setAttribute('id','1003');
$ele->insertAfter($new_ele,undef);
last;
}
}
# if you can't open the file you want to know why
open(TESTFILE,">result.xml") or die "Can not open output: $!";
print TESTFILE $doc->toString;
close(TESTFILE);
exit;
__END__