I'm sending a fairly simple Perl hash to SOAP::Data, but I'm not getting the XML that I want with an array of hashes. Here's what I'm sending it:
'hash' => {
'Location' => [
{
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
},
{
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
},
],
}
Here's what I get:
<hash>
<Location>
<c-gensym9>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
</c-gensym9>
<c-gensym10>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
</c-gensym10>
</Location>
</hash>
But what I want is this:
<hash>
<Location>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
</Location>
<Location>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
</Location>
</hash>
What am I missing? I suppose it'd help if I gave some code!:
my $hash = {};
my @Locations;
my @loc_codes = qw(0_4_10 0_51_117);
foreach my $l ( @loc_codes ) {
my @arr = split ('_', $l);
my $loc = {};
$loc->{key1} = $arr[0]; # country
$loc->{key2} = $arr[1]; # state
$loc->{key3} = $arr[2]; # city
push ( @Locations, $loc );
}
$hash->{Location} = \@Locations;
my $soap_elements = SOAP::Data->value(
SOAP::Data->name( 'some_method' => $hash )->prefix('p1')
)->prefix('p2');