http://www.perlmonks.org?node_id=928511


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

is the view of the xml fix or is it only your thinkin of storing the data on this way?
use strict; use XML::Simple; $filename = "yours.xml"; xml_edit($filename); # return done 1 || error 0 sub xml_edit($){ my$bool=0; %DB=load($_[0]); if(exists$DB{student}{id}{2}) { $DB{student}{gpa}='C'; $bool++; } save($_[0],\%DB); return$bool; } #untested
but i recommend you to build a hash of your data within perl and export it via "save($filename,\%hashref);"

for this you got truly the right structure with easy editing potential even if the data gets more bulky.
$perlig =~ s/pec/cep/g if 'errors expected';

Replies are listed 'Best First'.
Re^2: How can I replace a line (tag) in an XML file?
by Jenda (Abbot) on Sep 29, 2011 at 10:19 UTC

    The problem with XML::Simple (well, one of) when using it to edit a file is that it tends to change the XML in ways that do not make a difference when the file is read by XML::Simple, but will cause all other tools to fail to read it.

    In this particular case all those content-only tags will become attributes of the parent tag. XML::Simple will not mind, other tools most probably will.

    Not speaking about the fact that your code would not work ... there is no load() or save() in XML::Simple and the data structure would look different than what you seem to think.

    Jenda
    Enoch was right!
    Enjoy the last years of Rome.

      i´m sorry - sunken in my own projects i should probably post full storys ;-)
      sub load{return%{XML::Simple->new(ForceContent=>1)->XMLin($_[0])};}#lo +ads xml sub save{XMLout($_[1],OutputFile=>$_[0]);1;}#saves hash to xml
      but your still mostly right.. for me it works fine..
      $perlig =~ s/pec/cep/g if 'errors expected';