Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re^6: how to update an xml file by read data from csv file

by Vijay81 (Acolyte)
on Dec 03, 2012 at 21:09 UTC ( #1006952=note: print w/replies, xml ) Need Help??

in reply to Re^5: how to update an xml file by read data from csv file
in thread how to update an xml file by read data from csv file

Thanks bitingduck. i tried the why you said above but seems some error while running the script. not able to resolve the error. can you please advise where am doing wrong. Main script :
#!/usr/bin/perl use warnings; use strict; use Text::CSV; use XML::TreeBuilder; use Data::Dumper; my $xmlbase='original.xml'; my $paramsfile = 'params.csv'; my $mycontainerless; # the list of tags filled from the csv file my @taglist=qw(name protocol host commandline); # this is the part that repeats, so we break it out separately # the tags that get filled from the CSV file are left empty my $connection= <<END <connection type="PuTTY" name="WSSS"> <connection_info> <name></name> <protocol></protocol> <host></host> <port>22</port> <session>Default Settings</session> <commandline></commandline> <description /> </connection_info> <login> <login /> <password /> <prompt /> </login> <timeout> <connectiontimeout>1000</connectiontimeout> <logintimeout>750</logintimeout> <passwordtimeout>750</passwordtimeout> <commandtimeout>750</commandtimeout> </timeout> <command> <command1 /> <command2 /> <command3 /> <command4 /> <command5 /> </command> <options> <loginmacro>False</loginmacro> <postcommands>False</postcommands> <endlinechar>10</endlinechar> </options> </connection> END ; open (my $resultfile, '>>', 'resultxml.xml') or die "Can't open file: +$!"; #this is the wrapper my $config= <<END <?xml version="1.0" encoding="UTF-8"?> <!-- The following lines can be modified at your own risks. --> <configuration version="" savepassword="True"> <root type="database" name="WSSS" expanded="True"> <container type="folder" name="CM" expanded="True"> <container type="folder" name="1-AD/M" expanded="True"> </container> </container> </root> </configuration> END ; #start an xml structure with the outer wrapper my $tree=XML::TreeBuilder->new(); $tree->parse($config); # find the insert location my $container=$tree->look_down("_tag"=>"container", "name"=>"1-AD/M"); my $csv=Text::CSV->new(); open my $fh, "<:encoding(utf8)", $paramsfile or die "$paramsfile: $!"; # loop through the lines of the CSV and copy the connection structure +into # the wrapper with the updated values while(my $row=$csv->getline($fh)){ my $contree=XML::TreeBuilder->new(); #make an xml structure of th +e connection $contree->parse($connection); $container->push_content($contree); #insert it into the wrapper $contree->attr('name',$row->[0]); #set the name attribute $container->push_content("\n "); #make it a little prettier my $index=0; for my $tagname(@taglist){ #loop through the columns my $tag=$contree->look_down('_tag'=> $tagname); $tag->push_content($row->[$index++]); } } #print '<?xml version="1.0" encoding="UTF-8"?>'."\n"; print $tree->as_XML(); $mycontainerless=$tree->as_XML(); $mycontainerless=~%</container>%%gi; print $mycontainerless; print $resultfile '<?xml version="1.0" encoding="UTF-8"?>'."\n"; print $resultfile $tree->as_XML(); close($resultfile);
Error :
>perl Bareword found where operator expected at line 98, near "%%gi" (Missing operator before gi?) Operator or semicolon missing before %gi at line 98. Ambiguous use of % resolved as operator % at line 98. syntax error at line 98, near "%%gi" Execution of aborted due to compilation errors.
line number 98 is :

Replies are listed 'Best First'.
Re^7: how to update an xml file by read data from csv file
by bitingduck (Chaplain) on Dec 05, 2012 at 00:11 UTC

    I left out an 's'

      Thank you very much. It worked.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1006952]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2017-06-24 04:28 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (556 votes). Check out past polls.