http://www.perlmonks.org?node_id=629418


in reply to Re^2: SOAP::Deserializer problem
in thread SOAP::Deserializer problem

I didn't realise you don't code the request like this:
$method = SOAP::Data->name('command'=>'value');

So to access attribute values you should use

$attr_value = $som->dataof('//Envelope/Body/command')->attr->{'template'};
or
$attr_value = $som->dataof('//command')->attr->{'template'};
(I don't remember which one because don't use attributes.)

This should hold for
<Envelope>
<Body>
<command template="foo">100</command>
</Body>
</Envelope>

and $attr_value is foo, command value is 100.

Docs are in SOAP/SOM.pod of perl/site/lib directory.

Replies are listed 'Best First'.
Re^4: SOAP::Deserializer problem
by axelrose (Scribe) on Jul 29, 2007 at 18:47 UTC
    Sorry, my first go was more complicated than necessary. Here is a second simplified go to demonstrate my problem:
    #!/usr/bin/perl use warnings; use strict; use SOAP::Lite; my $xml = <<'eof'; <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/env +elope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <command id="1"> <message id="2"> <time time="27.07.2007-10:37:49 +0200"/> </message> </command> </SOAP-ENV:Body> </SOAP-ENV:Envelope> eof my $som = SOAP::Deserializer->deserialize($xml); print "time = ", $som->dataof('//command/message/time')->attr->{time}, + "\n"; print "done.\n";
    Output is
    time = 27.07.2007-10:37:49 +0200 done.
    but
    Can't call method "attr" on an undefined value at deserialize-test2.pl + line 23.
    as soon as the id attributes of command and message are identical. I wouldn't care if I could get the raw XML from the SOAP response. Axel.
      You want to avoid the use of id attributes and rename them to some other name or qualify them in the namespace.

      SOAP protocol uses id/href attribute pairs to identify its entities.

      If you specify outputxml('true') for a soap object, a method will return raw xml code.

        Thanks a lot.

        For all practical purposes this is solved now

        Axel.