Using this below script,use strict; use warnings; use XML::Simple; BEGIN { @__PACKAGE__::XML::ISA = qw/ XML::Simple /; my %order = ( TestResult => [ qw/xmlns xmlns:xsi xsi:schemaLocation Result Comments Para +meters Files Images /], ); *__PACKAGE__::XML::sorted_keys = sub { my ( $self, $name, $h ) = @_; return @{ $order{$name} } if $order{$name}; sort keys %$h; }; } sub new { my ($class) = @_; my $self = { _xml => { "xmlns" => "Someinfo", "xmlns:xsi" => "Someinfo", "xsi:schemaLocation" => "Someinfo", }, }; bless $self => $class; } sub comments { my ( $self, $comments ) = @_; $self->{_xml}{Comments} = { content => $comments }; } sub result { my ( $self, $result ) = @_; $self->{_xml}{Result} = { content => $result }; } sub image { my ( $self, $image, $desc ) = @_; my $imageid = "Image" . $image; $self->{_xml}{Images}{$imageid} = { content => $desc }; } sub file { my ( $self, $file, $desc ) = @_; my $fileid = "File" . $file; $self->{_xml}{Files}{$fileid} = { content => $desc }; } sub parameter { my ( $self, $group, $key, $value ) = @_; my $groupid = "Group".$group; my $keyid = "Key".$key; $self->{_xml}{Parameters}{Parameter}{$groupid}{Parameter}{$keyid} += { content => $value }; } sub as_xml { my ($self) = @_; my $file_name = "output.xml"; my $serialize = __PACKAGE__::XML->new; my @arrayout= $serialize->XMLout( $self->{_xml}, GroupTags => { Files => "File", Images => "Image", Parameters => "ParameterGroup", ParameterGroup => "Parameter" }, KeyAttr => { ParameterGroup => "+ID", Parameter => "+key", File => "+key", Image => "+key", }, RootName => "TestResult", XMLDecl => 1, ); foreach ( @arrayout ) { open FH, ">>$file_name" or die "can't open '$file_name': $!"; print FH $_; close FH; }
I was able to get this something likemy $tr = Reporting->new; $tr->parameter(1, 1, "Some Process A Happened"); $tr->parameter(1, 2, "Some Process B Happened"); $tr->parameter(2, 1, "Some Process A Happened"); $tr->parameter(3, 1, "Some Process Happened"); $tr->image(1, "Some info"); $tr->parameter(6, 1, "Some Process Z Happened"); $tr->file(10, "Some File"); $tr->result("Pass"); $tr->comments("Executed Successfully"); print $tr->as_xml;
But I need the parameters part of the XML to look like this,<?xml version='1.0' standalone='yes'?> <TestResult xmlns="some info" xmlns:xsi="some info" xsi:schemaLocation +="some info"> <Result>Pass</Result> <Comments>Executed Successfully</Comments> <Parameters> <ParameterGroup ID="Parameter"> <Parameter key="Group1"> <Parameter key="1">Some Process A Happened</Parameter> <Parameter key="2">Some Process B Happened</Parameter> </Parameter> <Parameter key="Group2"> <Parameter key="1">Some Process A Happened</Parameter> </Parameter> <Parameter key="Group3"> <Parameter key="1">Some Process Happened</Parameter> </Parameter> <Parameter key="Group6"> <Parameter key="1">Some Process Z Happened</Parameter> </Parameter> </ParameterGroup> </Parameters> <Files> <File key="File10">Some File</File> </Files> <Images> <Image key="Image1">Some info</Image> </Images> </TestResult>
Where is it going wrong? Thanks..<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>
In reply to Need change in dynamic XML Structure using XML::Simple by Perllace
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |