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>
|