I tried using XML::Simple, but it looks like that it would not meet my requirements. So i thought using LibXML would be a good option. In this case where I have something like
TestResult xmlns="somevalue" xmlns:xsi="somealue" xsi:schemaLocation="
+somevalue">
<Result>Pass</Result>
<Comments>Executed Successfully</Comments>
- <Parameters>
- <ParameterGroup ID="Group1">
<Parameter key="Key1">Some Value</Parameter>
<Parameter key="Key2">Some Value</Parameter>
<Parameter key="Key3">Some Value</Parameter>
</ParameterGroup>
- <ParameterGroup ID="Group2">
<Parameter key="Key1">Some Value</Parameter>
<Parameter key="Key2">Some Value</Parameter>
<Parameter key="Key3">Some Value</Parameter>
</ParameterGroup>
</Parameters>
- <Files>
<File key="FileTag1">Path to file</File>
<File key="FileTag2">Path to file</File>
<File key="FileTag3">Path to file</File>
</Files>
</TestResult>
I have tried something like
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML::Document->new('1.0', 'utf-8');
my $root = $doc->createElement("TestResult");
my $param = $doc->createElement("Parameters");
$root->setAttribute('xmlns'=> 'somevalue');
$root->setAttribute('xmlns:xsi'=>'somevalue');
$root->setAttribute('xsi:schemaLocation' => 'somevalue');
my %tags = ( Result => 'Pass');
for my $name (keys %tags)
{ my $tag = $doc->createElement($name);
my $value = $tags{$name};
print $value;
$tag->appendTextNode($value);
$root->appendChild($tag);
}
my %ParamGroup = (ParameterGroupID => '1');
for my $name1 (keys %ParamGroup)
{
my $ParamGroup = $doc->createElement($name1);
my $value1 = $ParamGroup{$name1};
$ParamGroup->appendTextNode($value1);
$param->appendChild($ParamGroup);
}
$doc->setDocumentElement($root);
my $filename = "samplexml";
my $format = '1';
$doc->toFile($filename,$format);
the output I get for this is
<?xml version="1.0" encoding="utf-8"?>
<TestResult xmlns="somevalue" xmlns:xsi="some value" xsi:schemaLocatio
+n="some value">
<Result>Pass</Result>
</TestResult>
Where is it going wrong.. some code sample please..