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>
变成
<S:Body>
如果您随后尝试将其作为 XML 文档加载,将无法正常工作,因此只需使用
$resultxml = $client->__getLastResponse();
我正在使用 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>
变成
<S:Body>
如果您随后尝试将其作为 XML 文档加载,将无法正常工作,因此只需使用
$resultxml = $client->__getLastResponse();