xml::simple issue with the key

H

hillgoogle

I have a hash defined like:

my %men = ();
my $men;
$men{'men1'} = {'man' => { 'id' => '5',
'man_name' => ['john doe'],
'man_nt_name' => ['jdxyz'],
'man_size' => ['large'] }
};
$men{'men2'} = {'man' => { 'id' => '7',
'man_name' => ['fred Doe'],
'man_nt_name' => ['fdabc'],
'man_size' => ['size'] }
};

and I am outputting the hash to xml as follows:

#open the file
open my $fh, '>:encoding(iso-8859-1)', $prodfile or die
"open($prodfile): $!";

# create object
my $xml = new XML::Simple (KeyAttr=>'man', RootName=>'root');

#output
$xml->XMLout(\%men, OutputFile => $fh);

What I am getting is:
<root>
<men1 man="man" id="5">
<man_name>john doe</man_name>
<man_nt_name>jdxyz</man_nt_name>
<man_size>large</man_size>
</men1>
<men2 man="man" id="7">
<man_name>fred Doe</man_name>
<man_nt_name>fdabc</man_nt_name>
<man_size>size</man_size>
</men2>
</root>

What I want is:
<root>
<man id="5">
<man_name>john doe</man_name>
<man_nt_name>jdxyz</man_nt_name>
<man_size>large</man_size>
</man>
<man id="7">
<man_name>fred Doe</man_name>
<man_nt_name>fdabc</man_nt_name>
<man_size>size</man_size>
</man>
</root>

You can see that I don't want the hash key in the xml output.

Any help is appreciated.

Mike
 
J

J. Gleixner

I have a hash defined like:

my %men = ();
my $men;
$men{'men1'} = {'man' => { 'id' => '5',
'man_name' => ['john doe'],
'man_nt_name' => ['jdxyz'],
'man_size' => ['large'] }
};
$men{'men2'} = {'man' => { 'id' => '7',
'man_name' => ['fred Doe'],
'man_nt_name' => ['fdabc'],
'man_size' => ['size'] }
};

and I am outputting the hash to xml as follows:

#open the file
open my $fh, '>:encoding(iso-8859-1)', $prodfile or die
"open($prodfile): $!";

# create object
my $xml = new XML::Simple (KeyAttr=>'man', RootName=>'root');

#output
$xml->XMLout(\%men, OutputFile => $fh);

What I am getting is:
<root>
<men1 man="man" id="5">
<man_name>john doe</man_name>
<man_nt_name>jdxyz</man_nt_name>
<man_size>large</man_size>
</men1>
<men2 man="man" id="7">
<man_name>fred Doe</man_name>
<man_nt_name>fdabc</man_nt_name>
<man_size>size</man_size>
</men2>
</root>

What I want is:
<root>
<man id="5">
<man_name>john doe</man_name>
<man_nt_name>jdxyz</man_nt_name>
<man_size>large</man_size>
</man>
<man id="7">
<man_name>fred Doe</man_name>
<man_nt_name>fdabc</man_nt_name>
<man_size>size</man_size>
</man>
</root>

You can see that I don't want the hash key in the xml output.

Then why are you putting it in the data structure?

XML:Simple converts your data structure, so modify the data structure
accordingly.

push( @{ $men{ 'man' } },
{'id' => '5',
'man_name' => ['john doe'],
'man_nt_name' => ['jdxyz'],
'man_size' => ['large'] } );
push( @{ $men{ 'man' } },{ 'id' => '7',
'man_name' => ['fred Doe'],
'man_nt_name' => ['fdabc'],
'man_size' => ['size'] }
);

[...]
<root>
<man id="5">
<man_name>john doe</man_name>
<man_nt_name>jdxyz</man_nt_name>
<man_size>large</man_size>
</man>
<man id="7">
<man_name>fred Doe</man_name>
<man_nt_name>fdabc</man_nt_name>
<man_size>size</man_size>
</man>
</root>
 
H

hillgoogle

Nice ... that is exactly what I needed. TY !!!

So i was creating new structures instead of adding ...

Thanks, Mike
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,905
Latest member
Kristy_Poole

Latest Threads

Top