my $lite= new SOAP::Lite ->uri($uri) ->proxy($proxy) ->on_action(sub { sprintf ('%s/%s',@_);}) ->deserializer(SOAP::Custom::XML::Deserializer->new) # later... $result=$lite->call($method=>@params); # $result contains an ADO.Net dataset my $ds=$result->valueof('//NewDataSet'); my @rows=$ds->value(); my $nr=scalar(@rows); my $res="Records:$nr\n"; return unless $nr > 0; my @headers=map {$_->{_name}} ($rows[0]->value()); $res .= join(",",@headers). "\n"; foreach my $val (@rows) { $res .= join(',',($val->value())) . "\n"; }