Soap XML 输出创建一个数组

Soap XML Output Creates an Array

我正在使用 SoapClient 调用 Web 服务并尝试从响应输出中提取数据。我修改了 Soap 响应,使其显示在 XML 中。

我是这样写的:$resultxml = htmlentities($client->__getLastResponse()) . "\n";

如果你做一个简单的 print_r($resultxml); 你显然会收到完整的输出。

我遇到的问题是使用 DomDocument$resultxml 创建我的 techData 数组。如果我复制并粘贴 Soap 输出并用它创建一个独立的 XML 文件,然后将它添加到 $dom->loadXML();,那么 techData 数组就完美创建了。但是,当我尝试从 $resultxml 中提取 XML 时,我收到一个空白数组。

关于这是为什么的任何想法?我应该考虑修改 $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>";

当您使用 htmlentities() 时 - 这将对标记进行编码,因此

<S:Body>

变成

&lt;S:Body&gt;

如果您随后尝试将其作为 XML 文档加载,将无法正常工作,因此只需使用

$resultxml = $client->__getLastResponse();