4

SoapClient呼び出しようとしている Web サービスから返される応答をPHP に組み込みで解釈するのに苦労しています。

SoapUIは、この SOAP メソッドに問い合わせて、適切な結果を返すことができます。また、正しい結果を返すこともできnusoap_clientます (ただし、他の理由で使用できず、nusoap行き詰まっていると思いますSoapClient)。

を使用するSoapClientと、一見適切なデータが返されていることがわかりますが、結果が解析されて、簡単に使用できる値の配列に分割されるのではなく、XML 応答文字列がオブジェクトの 1 つのフィールド (「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ます。

4

3 に答える 3

1

その結果を取得して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」文字列を含むオブジェクトです。

于 2012-08-05T10:47:30.993 に答える
0

SOAP_SINGLE_ELEMENT_ARRAYS機能を使ってみましたか?

<?php
$client = new SoapClient($url, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS));
于 2012-06-26T13:45:21.853 に答える