>>>> Depending on whether there are one or more sets of values, XML::Simple
>>>> either creates a hash or an array, either of which are stored here:
>>>>
>>>> $parsed_response->{Label}->{Image}
>>>>
>>>> My code retrieves the correct value when it's an array but I'm not
>>>> sure how to do the same when it's a hash. I also need to be able to
>>>> decide if it's a hash or an array so I can execute the appropriate
>>>> code for retrieving the value. Can anyone show me how to do this?
>>>
>>> I'm afraid XML::Simple isn't very good at producing consistent data
>>> structures unless it is tweaked a little. Using ForceArray should help;
>>> this is from the documentation
>>>
>>>> * check out "ForceArray" because you'll almost certainly want to
>>>> turn
>>>> it on
>>>
>>> and
>>>
>>>> ForceArray => 1 *# in - important*
>>>> This option should be set to '1' to force nested elements to be
>>>> represented as arrays even when there is only one.
>>
>> Thanks Rob. I think ForceArray is what I need but I can't come up
>> with the right setting. If I set 'ForceArray => 1', everything seems
>> to be forced into an array but I don't want to loop with foreach for
>> every value I want to retrieve. I'd like to force only
>> $parsed_response->{Label}->{Image} into an array but I can't find the
>> correct setting for ForceArray.
>
> I presume you have tried
>
> ForceArray => ['Image']
I tried that and it seems to behave the same as 'ForceArray => 1'.
Everything seems to be forced into an array.
> For further help you must show more of your source XML and examples of
> the two forms of Perl data structure that you are seeing.
I'm very happy to report that I got it working by using 'ForceArray =>
1' and specifying [0] to pick the first (and what should be the only)
value from all of the new arrays. I'm now using
$parsed_response->{Label}[0]->{Image} in the foreach loop. Is that a
good solution?
- Grant
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/