Разбор SOAP-ответа с PHP по-разному

Возможный дубликат:
Как разобрать SOAP-ответ без SoapClient

У меня простой XML-ответ nuSoap:

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <LoginResult xmlns="http://Siddin.ServiceContracts/2006/09">FE99E5267950B241F96C96DC492ACAC542F67A55</LoginResult> </soap:Body> </soap:Envelope> 

Теперь я пытаюсь проанализировать его с помощью simplexml_load_string как предлагается здесь: проанализировать XML с помощью SimpleXML, который имеет несколько пространств имен, и здесь: Проблема. Анализ SOAP-ответа в PHP с помощью simplexml , но я не могу заставить его работать.

Это мой код:

 $xml = simplexml_load_string( $this->getFullResponse() ); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $xml->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $xml->registerXPathNamespace('xsd', 'http://www.w3.org/2001/XMLSchema'); foreach($xml->xpath('//soap:Body') as $header) { var_export($header->xpath('//LoginResult')); } 

Но я все еще получаю только это в результате:

 /* array ( ) 

Что я делаю не так? Или простую вещь, которую я пропускаю, чтобы понять?


Результат работы с DOM по MySqlError :

 $doc = new DOMDocument(); $doc->loadXML( $response ); echo $doc->getElementsByTagName( "LoginResult" )->item(0)->nodeValue; 

Результат работы с SimpleXML по ndm :

 $xml = simplexml_load_string( $response ); foreach($xml->xpath('//soap:Body') as $header) { echo (string)$header->LoginResult; } 

 $doc = new DOMDocument(); $doc->loadXML( $yourxmlresponse ); $LoginResults = $doc->getElementsByTagName( "LoginResult" ); $LoginResult = $LoginResults->item(0)->nodeValue; var_export( $LoginResult ); 

Что здесь не так, так это простая поддержка пространства имен SimpleXMLs. Чтобы получить этот узел с использованием выражения XPath, вам нужно будет зарегистрировать префикс для пространства имен по умолчанию и использовать его в запросе, хотя элемент не имеет префикса, например:

 foreach($xml->xpath('//soap:Body') as $header) { $header->registerXPathNamespace('default', 'http://Siddin.ServiceContracts/2006/09'); var_export($header->xpath('//default:LoginResult')); } по foreach($xml->xpath('//soap:Body') as $header) { $header->registerXPathNamespace('default', 'http://Siddin.ServiceContracts/2006/09'); var_export($header->xpath('//default:LoginResult')); } 

Однако на самом деле нет необходимости использовать XPath для доступа к этому узлу, вы можете просто получить к нему доступ напрямую:

 foreach($xml->xpath('//soap:Body') as $header) { var_export($header->LoginResult); }