http://qs321.pair.com?node_id=751705


in reply to SOAP::Lite - READING Multiple namespaces

In the code below I took the XML you provided and added a new AuthenticatedStatus element with a different namespace for testing purposes. I'm feeding XML::XPath directly with that XML, but you can also save the response you get from the webservice and feed that file instead. Just change to my $xp = XML::XPath->new(filename => 'you_xml_file');

use strict; use warnings; use XML::XPath; my $stream = qq{ <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <ProcessSetupResponse xmlns="http://namespace1"> <ProcessSetupResult xmlns:a="http://namespace2" xmlns:i="http://www.w3 +.org/2001/XMLSchema-instance"> <a:AuthenticatedStatus>N</a:AuthenticatedStatus> <i:AuthenticatedStatus>Y</i:AuthenticatedStatus> <a:AuthenticatedWith>3-D Secure</a:AuthenticatedWith> ... </ProcessSetupResult> </ProcessSetupResponse> </s:Body> </s:Envelope> }; my $xp = XML::XPath->new(xml => $stream); $xp->set_namespace('a',"http://namespace2"); $xp->set_namespace('i',"http://www.w3.org/2001/XMLSchema-instance"); print "AuthStatus\t", $xp->getNodeText('//ProcessSetupResponse/Process +SetupResult/i:AuthenticatedStatus'), "\n"; print "AuthStatus\t", $xp->getNodeText('//ProcessSetupResponse/Process +SetupResult/a:AuthenticatedStatus'), "\n";

outputs

AuthStatus Y AuthStatus N

Replies are listed 'Best First'.
Re^2: SOAP::Lite - READING Multiple namespaces
by DreamT (Pilgrim) on Mar 20, 2009 at 10:16 UTC
    Ok, thank you! That will do the trick.
    BUT, how do I get the webservice response to a file (or a variable) in the first place?
    (The XML file used in the example is dumped via traceall...)
    Usually, I operate on the result the following way:
    my $soapAnswer = $soapHanterare->call($setup => @setup_values); my $faultstring = $soapSvar->valueof('//faultstring');

    Sorry for all the stupid questions...but, see it this way, you're helping a former windows developer to the lovely world of Perl:-)

      check $soapAnswer->result. Dump it to see what you are dealing with.

        Hi,
        Unfortunately that gives me an empty value :-(
        I try to dump it but I get an empty string. How do I do it?