Intereting Posts
Получить корневой узел XML-документа с помощью simplexml Mysql удаляет конкретное слово в строке, разделенной запятыми Как использовать контейнер Symfony 2 в устаревшем приложении Query Builder и Group By на двух столбцах в Symfony2 / Doctrine генерируют дубликаты проблема с загрузкой изображений с загрузкой файла php Маршрут к нескольким подпапкам в CodeIgniter Получать переменные в области видимости на каждом уровне backtrace PHP? Определите ближайший гексаговый цвет к списку существующих шестнадцатеричных значений Как извлечь почтовую атаку с помощью PHP? Испытательное соединение Laravel с SOAP WDSL и обработка исключений Как правильно создать функцию для форматирования на PHP в расширении Yii2 Highcharts Миграция Yii2 из Apache в Nginx – не удалось выполнить бэкэнд-приложение Включение входа в facebook, используя facebook php-sdk (v.3.0.0), с сеансами и файлами cookie $ _POST пуст после отправки формы Каков правильный способ использования нового PDO в контексте класса?

Ошибка ответа на парную партию PHP – SimpleXMLElement

У меня возникают проблемы с использованием PHP SimpleXMLElement и simpleSMLToArray() для анализа SOAP-ответа. Я получаю SOAP-ответ от моего SOAP-сервера просто отлично. В этом случае я пишу как клиент SOAP, так и сервер. Я использую NuSoap для сервера. Для меня реакция на мыло выглядит идеально, но PHP5 Soap Client, похоже, не анализирует ее. Итак, как и в прошлом, я использую SimpleXMLElement и функцию simpleXMLToArray() из PHP.NET ( http://php.net/manual/en/book.simplexml.php ), но, похоже, не может получить массив.

 <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:eCaseWSDL"> <SOAP-ENV:Body> <ns1:registerDocumentByPatientResponse xmlns:ns1="urn:eCaseWSDL"> <returnArray xsi:type="tns:ReturnResult"> <id xsi:type="xsd:int">138</id> <method xsi:type="xsd:string">registerDocumentByPatient</method> <json xsi:type="xsd:string">0</json> <message xsi:type="xsd:string">success</message> <error xsi:type="xsd:string">0</error> </returnArray> </ns1:registerDocumentByPatientResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

PHP-код из моего класса (эти ссылки относятся к моему библиотечному коду).

 // Define SimpleXMLElement $xml_element = new SimpleXMLElement($response_string); // SOAP XML $name_spaces = $xml_element->getNamespaces(true); var_dump($name_spaces); $soap = $xml_element->children('ns1'); var_dump($soap); $soap_array = $this->simpleXMLToArray($soap); var_dump($soap_array); return $soap_array; 

Я вижу пространства имен; ns1 и т. д. Но массив не возвращается. SimpleXMLElement выглядит как возвращающий объект, но пустой.

 <pre>array(3) { ["SOAP-ENV"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" ["ns1"]=> string(13) "urn:eCaseWSDL" ["xsi"]=> string(41) "http://www.w3.org/2001/XMLSchema-instance" } object(SimpleXMLElement)#23 (0) { } bool(false) 

У любого есть идеи относительно того, что я делаю неправильно. Сегодня утром я не должен был выпить достаточно кофе. Я соблазн просто разобрать его с помощью регулярных выражений.

SimpleXML создает объект дерева, поэтому вам нужно следовать этому дереву, чтобы добраться до нужных вам узлов.

Кроме того, при доступе к нему вы должны использовать фактический URI пространства имен, например: urn:eCaseWSDL вместо ns1 :

Попробуй это:

 $soap = $xml_element->children($name_spaces['SOAP-ENV']) ->Body ->children($name_spaces['ns1']) ->registerDocumentByPatientResponse ->children(); var_dump((string)$soap->returnArray->id); // 138