Выходные данные Soap XML создают массив - PullRequest
0 голосов
/ 20 сентября 2018

Я звоню в веб-службу, используя SoapClient, и пытаюсь получить данные из вывода ответа.Я изменил ответ Soap, чтобы он отображался в XML.

Я сделал это, написав это: $resultxml = htmlentities($client->__getLastResponse()) . "\n";.

Если вы выполните простое print_r($resultxml);, вы получите полный вывод, очевидно.

У меня проблемы с использованием DomDocument с $resultxml для создания моего techData массива.Если я скопирую и вставлю вывод Soap и создам с ним отдельный XML-файл, то добавлю его в $dom->loadXML();, массив techData будет создан идеально.Однако, когда я пытаюсь извлечь XML из $resultxml, я получаю пустой массив.

Есть идеи, почему это так?Должен ли я рассмотреть пересмотр $resultxml = htmlentities($client->__getLastResponse()) . "\n";?Я называю это неправильно?

Большое спасибо.

Мой PHP с моим запросом SoapClient и кодом массива:

<?php
 $client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl', array('trace' => 1));
 $account = ['number'=>"", 'secret'=>"", 'country'=>"US",    'language'=>"en"];
 $switch =  ["ShowAvailableEquipment", "ShowExtendedTechnicalSpecifications", "ShowExtendedDescriptions"];
 $vin = $_POST["b12"];

$result = $client->describeVehicle([
'accountInfo' => $account,
'switch' => $switch,
'vin' => $vin
]);

$resultxml = htmlentities($client->__getLastResponse()) . "\n";

$dom = new DOMDocument();
$dom->loadXML($resultxml);


$techData = [];
foreach ( $dom->getElementsByTagName('technicalSpecification') as $techSpec )   {
$id = $techSpec->getElementsByTagName('titleId')->item(0)->nodeValue;
$techData [$id]= $techSpec->getElementsByTagName('value')->item(0)->getAttribute("value")."<br>";

}

print_r($techData);
echo "<br>";

1 Ответ

0 голосов
/ 20 сентября 2018

Когда вы используете htmlentities() - это закодирует разметку, поэтому

<S:Body>

становится

&lt;S:Body&gt;

thiw не будет работать, если вы попытаетесьчтобы загрузить его как документ XML, просто используйте

$resultxml = $client->__getLastResponse();
...