Thursday, June 16, 2005

Parsing a result object from SOAP::Lite

Parsing a result object from SOAP::Lite: "Parsing a result object from SOAP::Lite
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:




abcd




...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."
Post a Comment