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