我正在努力让php的内置SoapClient
解释我试图调用的web服务返回的响应。SoapUI
能够询问此soap方法并返回良好的结果。
我也可以得到nusoap_client
以返回正确的结果(但由于其他原因无法使用nusoap
,并且认为我被SoapClient
困住了)。
使用SoapClient
,我可以看到返回的是看似良好的数据,但结果没有被解析并分解为易于使用的值数组,而是将xml响应字符串填充到对象中的单个字段中(标记为“any”)。
我的代码和结果如下所示:
$client = new SoapClient($url);
$results = $client->GetPropertiesByProjectAndContractStatus($params);
var_dump($results);
上述代码的输出如下:
object(stdClass)[3]
public 'GetListingsByGUIDResult' =>
object(stdClass)[4]
public 'any' => string '<xs:schema xmlns="" ........ (long xml here) ....
现在,我使用的服务可能返回了一些有问题的xml(尽管在我看来似乎很好)。
nusoap
和SoapUI
使用它也没有问题。所以我想知道
SoapClient
有什么不同。 最佳答案
我有一个函数来获取结果并将其转换为dom对象,这样您就可以使用dom函数来提取数据。
protected function getElementsFromResult($elementName, $simpleresult) {
$dom = new DOMDocument ();
$dom->preserveWhiteSpace = FALSE;
if ($simpleresult == null) {
echo 'null';
return null;
} else {
$dom->loadXML ( $simpleresult->any );
return $dom->getElementsByTagName ( $elementName );
}
$elementName
是要从结果中获取的元素的名称,$simpleresult
是包含“any”字符串的对象。关于php - PHP SoapClient没有将XML响应解释为数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11067952/