I'm using cURL to POST a SOAP request. The response is as follows:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To> <wsa:Action>http://www.csapi.org/schema/parlayx/common/v3_1/TerminalLocationPort/getLocationForGroupResponse</wsa:Action> </env:Header> <env:Body> <ns2:getLocationForGroupResponse xmlns:ns2="http://www.csapi.org/schema/parlayx/terminal_location/v3_1/local"> <ns2:result> <address>234983</address> <reportStatus>Retrieved</reportStatus> <currentLocation> <latitude>12.5665</latitude> <longitude>43.7708</longitude> <timestamp>2012-01-03T17:06:16.805+01:30</timestamp> </currentLocation> </ns2:result> <ns2:result> <address>423903</address> <reportStatus>Retrieved</reportStatus> <currentLocation> <latitude>12.2165</latitude> <longitude>43.6518</longitude> <timestamp>2012-01-03T17:06:16.824+01:30</timestamp> </currentLocation> </ns2:result> </ns2:getLocationForGroupResponse> </env:Body> </env:Envelope> I use this to decode:
$err = curl_error($soap_do); $result = curl_exec($soap_do); $xml = simplexml_load_string($result); $ns = $xml->getNamespaces(true); $soap = $xml->children($ns['env']); $getaddressresponse = $soap->body->children($ns['ns2']); foreach ($getaddressresponse->children() as $item) { echo (string) $item->address . '<br />'; } I'm having trouble decoding this with SimpleXML. This link seems most relevant to my situation but I'm unable to apply it to my case as the simpleXML element just
Warning: SimpleXMLElement::children() [simplexmlelement.children]: Node no longer exists in C:\.php on line 33 /*(line with the for each statement)*/ Any suggestions?
UPDATE: If the server responds with the following error, how would I detect it..?
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To> <wsa:Action>http://www.w3.org/2005/08/addressing/fault</wsa:Action> </env:Header> <env:Body> <env:Fault> <faultcode>env:Server</faultcode> <faultstring>Service Exception</faultstring> <detail> <ns1:ServiceException xmlns:ns1="http://www.csapi.org/schema/parlayx/common/v3_1" xmlns:ns2="http://www.csapi.org/schema/parlayx/terminal_location/v3_1/local"> <messageId>SVC004</messageId> <text>Trip not Found for this MSISDN</text> </ns1:ServiceException> </detail> </env:Fault> </env:Body> </env:Envelope>