2

我正在使用 wsdl 文件,并从整个过程中学到了很多东西。

我正在实例化 SoapClient:

$webservice = new SoapClient("mainwsdl.wsdl");
var_dump($webservice->AccountsGetXML()); 

下面是回复,我对解析数据还是有点陌生​​。

object(stdClass)#2 (3) {
  ["AccountsGetXMLResult"]=>
  object(stdClass)#3 (1) {
    ["any"]=>
    string(391) "<AccountsWSDS xmlns=""><ERRORS><ERROR_ID>1</ERROR_ID><TABLE_NAME>Accounts</TABLE_NAME><TABLE_ID>NoID</TABLE_ID><ROW_ID>-1</ROW_ID><COLUMN_ID>EXCEPTION</COLUMN_ID><ERROR_TYPE>E</ERROR_TYPE><ERROR_CODE>0</ERROR_CODE><ERROR_TEXT>Error connecting to database - please contact ABC Customer Services.  Msg: Object reference not set to an instance of an object.</ERROR_TEXT></ERRORS></AccountsWSDS>"
  }
  ["rowCount"]=>
  NULL
  ["pageCount"]=>
  NULL
}

我以前没有玩过 object(stdClass) 响应。或者,如果我有,我已经忘记了。

我想我需要解析 ["AccountsGetXMLResult"] 以获取特定信息,还需要解析 ["rowCount"] 和 ["pageCount"]。

我很困惑#2(3)是什么。

无论如何,这是我解析数据的尝试。我从 AccountsGetXMLResult 开始:

echo $webservice->AccountsGetXMLResult;

这是我回来的。
PHP 注意:未定义的属性:SoapClient::$AccountsGetXMLResult in /apache/test.php on line 23

很明显,我需要帮助来分析反应。

4

2 回答 2

1

$webservice->AccountsGetXML() 返回stdClass具有您在 var 转储中看到的属性的类型对象。stdClass只是一个“空占位符类”,没有任何自己的预定义属性或方法。要访问您看到的属性,请处理的返回$webservice->AccountsGetXML()

$obj = $webservice->AccountsGetXML();
var_dump($obj->AccountsGetXMLResult);
var_dump($obj->AccountsGetXMLResult->any);

这也像这样工作:

echo $webservice->AccountsGetXML()->AccountsGetXMLResult->any;
于 2012-05-22T01:16:40.670 回答
0

试试这个:

$result = json_decode(json_encode(simplexml_load_string($webservice->AccountsGetXML()->AccountsGetXMLResult->any)),TRUE);

print_r($result);
于 2013-06-11T00:54:06.207 回答