Users frequently ask, 'how do you iterate over an array returned by a SOAP service that I call.' It asked frequently enough that I figure I should answer it here here. As always, it is a lot simpler than you might think, its just that SOAP::Lite's documentation leaves a lot to be desired.
SOAP::Lite returns a SOAP::SOM object for most SOAP calls. The SOM object provides a simple API for accessing any aspect of the response's SOAP envelope. One accesses those contents via simple XPATH statements.
For example, suppose for the following SOAP Envelope:
...you wanted to access the value of the bar element. Then you would simply write your code as follows:
my $soap = SOAP::Lite
->uri($SOME_NS)
->proxy($SOME_HOST);
my $som = $soap->foo();
print $som->valueof('//fooResponse/bar');
Let's say that the SOAP Envelope returned contained an array. How would you iterate over each element of that array? Like so:
for my $t ($som->valueof('//catalog/product')) {
print $t->{title} . ' - ' . $t->{our_price} . '\n';
}
It is not always obvious, granted. But with a little tweaking here and there, and some familiarity with XPATH, you will quickly get the hang of it."
No comments:
Post a Comment