iPixel Posted April 13, 2012 Share Posted April 13, 2012 Ok this is driving me NUTS! After using SoapClient() this is the response i get back... <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <ns1:GetRegistrationURLResponse xmlns:ns1="http://impl.service.tempuri.com"> <ns1:out> <errorCode xmlns="http://model.tempuri.com">0</errorCode> <errorMessage xmlns="http://model.tempuri.com" xsi:nil="true" /> <registrationURL xmlns="http://model.tempuri.com"> https://www.tempuri.com/external/authenticate?org=orgname&token=uXiqcPV4%2FuEifbaR80PVBTxH4Oqd3tF%2BiEYaz%2F1OHJG7b5oxN7Bi8AIulmtbwATnjri2P1vCNy%2Fu77OzQEV2lQ%3D%3D </registrationURL> </ns1:out> </ns1:GetRegistrationURLResponse> </soap:Body> </soap:Envelope> So all i really need to pull out of there is the <registrationURL> I assign the response to a variable <?php $xml_response = $client->__getLastResponse(); ?> use SimpleXML <?php $xml = simplexml_load_string($xml_response,NULL,NULL,"http://schemas.xmlsoap.org/soap/envelope/"); ?> Using the code print_r($xml); displays this --> SimpleXMLElement Object ( [body] => SimpleXMLElement Object ( ) ) I have tried many ways, what i have now is this: <?php $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $xml->registerXPathNamespace('ns1', 'http://impl.service.tempuri.com'); #$xml->registerXPathNamespace('registrationURL', 'http://model.tempuri.com'); foreach ($xml->xpath('//ns1:GetRegistrationURLResponse/ns1:out') as $item) { echo $item->asXML(); } ?> but the result of that is 0https://www.tempuri.com/external/authenticate?org=nyit&token=uXiqcPV4%2FuEifbaR80PVBTxH4Oqd3tF%2BiEYaz%2F1OHJG7b5oxN7Bi8AIulmtbwATn3QmJanSYWqzS%2FgZM4eR%2Fcg%3D%3D parsed by browser... actual source XML is <ns1:out><errorCode xmlns="http://model.tempuri.com">0</errorCode><errorMessage xmlns="http://model.tempuri.com" xsi:nil="true"/><registrationURL xmlns="http://model.tempuri.com">https://www.tempuri.com/external/authenticate?org=orgname&token=uXiqcPV4%2FuEifbaR80PVBTxH4Oqd3tF%2BiEYaz%2F1OHJG7b5oxN7Bi8AIulmtbwATn3QmJanSYWqzS%2FgZM4eR%2Fcg%3D%3D</registrationURL></ns1:out> but i cannot for the life of me just pull out registrationURL so that i can somehow turn it into a link. Any ideas? Link to comment https://forums.phpfreaks.com/topic/260889-parsing-a-soap-response/ Share on other sites More sharing options...
xyph Posted April 13, 2012 Share Posted April 13, 2012 Your print_r tell you how it's done! $xml = simplexml_load_string($resp,NULL,NULL,"http://schemas.xmlsoap.org/soap/envelope/"); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $xml->registerXPathNamespace('ns1', 'http://impl.service.tempuri.com'); $xml_resp = $xml->xpath('//ns1:GetRegistrationURLResponse/ns1:out'); echo $xml_resp[0]->registrationURL; I'm not good with XPath or namespaces, so I can't provide you with the XPath query to get the result. Link to comment https://forums.phpfreaks.com/topic/260889-parsing-a-soap-response/#findComment-1337167 Share on other sites More sharing options...
iPixel Posted April 13, 2012 Author Share Posted April 13, 2012 Hah! That worked... thank you! Link to comment https://forums.phpfreaks.com/topic/260889-parsing-a-soap-response/#findComment-1337171 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.