in reply to Re: How can I replace a line (tag) in an XML file?
in thread How can I replace a line (tag) in an XML file?

Thanks for the timely response, I really appreciate it. I tested your code and it worked. However, I'd like to read the XML from a .xml file and replace the GPA tag (which you've already done). When I tried the following, I was able to read from the .xml file and replace the GPA tag, however the changes did not write back to the .xml file. I was only able to print the desired output but not able to write it back to the .xml file. This is what I have so far.

use warnings; use strict; use XML::Twig; open File, 'test.xml'; sysread(FILE, my $str, -s FILE); my $t = XML::Twig->new( twig_handlers => { student => \&student, }, pretty_print => 'indented', ); $t->parse($str); $t->print($str); print "\n"; close FILE; sub student { my ($t, $elt) = @_; if ($elt->field('id') eq '002') { $elt->first_child('gpa')->set_text('B'); } }

The print $str returns the desired output (changes the second instance of John's GPA from 'C' to 'B') but I'm not sure how to write this output back to the test.xml file. Any suggestions on this?

Replies are listed 'Best First'.
Re^3: How can I replace a line (tag) in an XML file?
by mirod (Canon) on Sep 30, 2011 at 04:24 UTC

    You update the initial file the same way you would update a text file, or any other type of file: in this case once you've read the file close it, then open in for writing ans print the output to this filehandle.

    The way you use open, the fact that you use sysread are kind of unusual, so either you have a very personal style or you have little Perl experience and you are cargo-culting your way through the problem. You may want to read a little bit about Perl if you need to use it properly. Invest in "Learning Perl", or read the docs (at least the part on open and print, type perldoc -f open to get them