Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Edit a node value in xml

by PolarSiva (Initiate)
on Jul 23, 2009 at 14:57 UTC ( #782694=perlquestion: print w/replies, xml ) Need Help??

PolarSiva has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks
i need to edit a xml node using Perl. For example
<project>
 <run_count>
  <count>13</count>
 </run_count>
</project>
i have to change the value 13 to 14 in the above example other than using regular exp. Kindly suggest some tips.

Replies are listed 'Best First'.
Re: Edit a node value in xml
by toolic (Bishop) on Jul 23, 2009 at 15:10 UTC
    You could use a CPAN module, such as XML::Twig. The following code unconditionally replaces the text of all instances of 'count' elements with the value 14.
    use strict; use warnings; use XML::Twig; my $xmlStr = <<XML; <project> <run_count> <count>13</count> </run_count> </project> XML my $twig= new XML::Twig( PrettyPrint => 'indented', twig_handlers => { count => \&count } ); $twig->parse($xmlStr); $twig->print(); exit; sub count { my ($twig, $cnt) = @_; $cnt->set_text(14); } __END__ <project> <run_count> <count>14</count> </run_count> </project>

    Side note: Welcome to the Monastery. In general, it is better to use 'code' tags instead of 'pre' tags when posting code. (see Perl Monks Approved HTML tags)

      Thanks a lot toolic
      The code works great
Re: Edit a node value in xml
by ramrod (Curate) on Jul 23, 2009 at 15:59 UTC
    Using XML::LibXML
    use XML::LibXML; my $template = 'sample.xml'; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($template); my($object) = $doc->findnodes("/project/run_count/count/text()"); my $text = XML::LibXML::Text->new('14'); $object->replaceNode($text); open (my $Output, ">$template") or die "Could not write $template"; print $Output $doc->toString; close ($Output) or die "Could not close generated $template ";

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://782694]
Approved by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2020-10-31 22:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (291 votes). Check out past polls.

    Notices?