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

have a following xml
<param> <product_name>ABC</product_name> <lcns> <lcns1> <ext>1000</ext> <lcns>text1</lcns> </lcns1> <lcns2> <ext>40</ext> <lcns>text2</lcns> </lcns2> <lcns3> <lcns>text3</lcns> </lcns3> </lcns> </param>
1. How can I Insert new entry with lcns4 to this xml
<lcns4> <ext>10</ext> <lcns>text4</lcns> </lcns3>
2. How can I edit existance entry ,for example
<lcns2> <ext>50</ext> <lcns>new text2</lcns> </lcns2>
All other entries should be stay as it

Replies are listed 'Best First'.
Re: How to edit and insert new elements in XML
by Anonymous Monk on Sep 09, 2008 at 09:41 UTC
    here is one way, good for small data sets
    #!/usr/bin/perl -- use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml = q~<?xml version='1.0'?> <param> <product_name>ABC</product_name> <lcns> <lcns1> <ext>1000</ext> <lcns>text1</lcns> </lcns1> <lcns2> <ext>40</ext> <lcns>text2</lcns> </lcns2> <lcns3> <lcns>text3</lcns> </lcns3> </lcns> </param>~; print $xml,$/; print Dumper( XMLin($xml)); # my $VAR1 = XMLin($xml); my $VAR1 = { 'lcns' => { 'lcns3' => { 'lcns' => 'text3' }, 'lcns2' => { 'ext' => '40', 'lcns' => 'text2' }, 'lcns1' => { 'ext' => '1000', 'lcns' => 'text1' } }, 'product_name' => 'ABC' }; # insert lcns4 $VAR1->{lcns}{lcns4} = { qw~ ext 10 lcns text4 ~ }; # edit existing entry lcns2 $VAR1->{lcns}{lcns2}{ext} = 50; $VAR1->{lcns}{lcns2}{lcns} = "new text2"; ## edit existing entry lcns2 $VAR1->{lcns}{lcns2} = { qw~ ext 50 lcns new text 2~ }; print XMLout($VAR1, NoAttr=>1,RootName=>'param',XMLDecl => 1, keyattr +=> []); __END__ <?xml version='1.0'?> <param> <product_name>ABC</product_name> <lcns> <lcns1> <ext>1000</ext> <lcns>text1</lcns> </lcns1> <lcns2> <ext>40</ext> <lcns>text2</lcns> </lcns2> <lcns3> <lcns>text3</lcns> </lcns3> </lcns> </param> $VAR1 = { 'lcns' => { 'lcns3' => { 'lcns' => 'text3' }, 'lcns2' => { 'ext' => '40', 'lcns' => 'text2' }, 'lcns1' => { 'ext' => '1000', 'lcns' => 'text1' } }, 'product_name' => 'ABC' }; <?xml version='1.0' standalone='yes'?> <param> <lcns> <lcns1> <ext>1000</ext> <lcns>text1</lcns> </lcns1> <lcns2> <ext>50</ext> <lcns>new</lcns> <text>2</text> </lcns2> <lcns3> <lcns>text3</lcns> </lcns3> <lcns4> <ext>10</ext> <lcns>text4</lcns> </lcns4> </lcns> <product_name>ABC</product_name> </param>
Re: How to edit and insert new elements in XML
by ww (Archbishop) on Sep 09, 2008 at 11:56 UTC