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="0.2.1.4" 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 xml.pl
Bareword found where operator expected at xml.pl line 98, near "%%gi"
(Missing operator before gi?)
Operator or semicolon missing before %gi at xml.pl line 98.
Ambiguous use of % resolved as operator % at xml.pl line 98.
syntax error at xml.pl line 98, near "%%gi"
Execution of xml.pl aborted due to compilation errors.
line number 98 is :
$mycontainerless=~%</container>%%gi;
|