Ответ мыла не XML, а строка - PullRequest
       12

Ответ мыла не XML, а строка

0 голосов
/ 11 декабря 2018

Я стажер во французской компании, и сегодня я начал работать над проектом php SOAP.

Главное - получить данные из ответа на запрос SOAP.

Пожалуйстанашел значение ответа var_dump:

The\path\of\my\php\File.php:7:string '

--uuid:0fadab50-5d3c-4ee8-b58c-3a1bafca60e8

Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml";

Content-Transfer-Encoding: binary

Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:getVersionResponse xmlns:ns2="http://www.reseaux-et-canalisations.gouv.fr/ws2_2" xmlns:ns3="http://www.reseaux-et-canalisations.gouv.fr/schema-teleservice/2.2" xmlns:ns4="http://www.opengis.net/gml/3.2" xmlns:ns5="http://'... (length=934)

Я пытаюсь получить эти данные, потому что в качестве ответа я получаю строку, а не XML.

Я пытался использовать simplexml_load_string() функция, но преобразование строк вообще не работает.

Я получаю объект SimpleXMLElement.

Я использовал это, чтобы получить только то, что меня интересует:

$soapClient = new GUSoapClient();
$soapClient->getVersion("xml");
$lastResponse = $soapClient->getClient()->__last_response;
preg_match('/<soap:Envelope.*<\/soap:Envelope>/', $lastResponse, $output_array);
$xmlTxt = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".$output_array[0];

Функция getVersion() возвращает SoapClient()->__getLastResponse();.

В GUSoapClient() атрибут client является личным, поэтому я получаю его с getClient().

Значение$lastResponse равно:

--uuid:ea2243f0-cb00-44ab-a9df-9a77d46febf8 Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; Content-Transfer-Encoding: binary Content-ID: <root.message@cxf.apache.org> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:getVersionResponse xmlns:ns2="http://www.reseaux-et-canalisations.gouv.fr/ws2_2" xmlns:ns3="http://www.reseaux-et-canalisations.gouv.fr/schema-teleservice/2.2" xmlns:ns4="http://www.opengis.net/gml/3.2" xmlns:ns5="http://www.w3.org/1999/xlink" xmlns:ns6="http://www.isotc211.org/2005/gco" xmlns:ns7="http://www.isotc211.org/2005/gmd" xmlns:ns8="http://www.isotc211.org/2005/gts" xmlns:ns9="http://xml.insee.fr/schema"><version>4.3.3-SNAPSHOT</version><phase>1.0 1.1 1.2 2.0 2.1 2.2 2.3 3.1 3.2 3.3 5.1</phase><environment>recette</environment></ns2:getVersionResponse></soap:Body></soap:Envelope> --uuid:ea2243f0-cb00-44ab-a9df-9a77d46febf8--

Значение $output_array равно:

 <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:getVersionResponse xmlns:ns2="http://www.reseaux-et-canalisations.gouv.fr/ws2_2" xmlns:ns3="http://www.reseaux-et-canalisations.gouv.fr/schema-teleservice/2.2" xmlns:ns4="http://www.opengis.net/gml/3.2" xmlns:ns5="http://www.w3.org/1999/xlink" xmlns:ns6="http://www.isotc211.org/2005/gco" xmlns:ns7="http://www.isotc211.org/2005/gmd" xmlns:ns8="http://www.isotc211.org/2005/gts" xmlns:ns9="http://xml.insee.fr/schema"><version>4.3.3-SNAPSHOT</version><phase>1.0 1.1 1.2 2.0 2.1 2.2 2.3 3.1 3.2 3.3 5.1</phase><environment>recette</environment></ns2:getVersionResponse></soap:Body></soap:Envelope>

Я пытался сделать это:

$xml = simplexml_load_string($xmlTxt);

Но var_dump($xml) дай мне это:

object(SimpleXMLElement)[5]

Все, что я хочу, - это получить значение, которое я хочу.Если у вас есть идеи о том, что я делаю неправильно, я бы хотел их услышать.Спасибо!

NB: я французский, мой английский не идеален.Если не понятно, скажите, пожалуйста;)

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

У меня были некоторые трудности, если simple_xml должен иметь дело с префиксом пространства имен.

Попробуйте удалить

$clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:', 'ns2:'], '', $xml);

$xmlArray = simplexml_load_string($clean_xml);

$json = json_encode($xmlArray);
$array = json_decode($json,TRUE);

$value = $array['foo']['bar'];

Массив $ должен содержать результат SOAP в виде массива

0 голосов
/ 11 декабря 2018

Попробуйте echo вместо var_dump В SimpleXMLElements есть метод __toString(), который означает, что если вы попытаетесь отобразить его, даже если это объект, он будет преобразован в строку для вас.http://php.net/manual/fr/simplexmlelement.tostring.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...