Update
I tested the change above, and found that it does not correct the problem, you need to use the form I have below with undef as the second arg to insertAfter. It is possible that this is a result of different versions, so test for yourself.
End update
I was just going to post the same thing as above after a quick test script. Here is the output produced by making the change:
<?xml version="1.0" encoding="utf-8"?> <University> <students> <student id="1000"/> <student id="1001"><student id="1003"/></student> <student id="1002"/> </students> </University>
On a different note, you should always have use strict; and use warnings; as well as check for critical failures in your code, like this:
#!/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__
In reply to Re^2: NOT_FOUND_ERR in insertAfter()
by boftx
in thread NOT_FOUND_ERR in insertAfter()
by kingsaint
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |