我正在努力让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(尽管在我看来似乎很好)。nusoapSoapUI使用它也没有问题。
所以我想知道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/

10-11 05:14