PHP解析对象(stdClass)响应

时间:2012-05-22 00:59:29

标签: php parsing

我正在使用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
}

之前我没有使用过对象(stdClass)的响应。或者,如果我有,我已经忘记了它。

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

我很困惑#2(3)的全部内容。

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

echo $webservice->AccountsGetXMLResult;

这是我得到的 PHP注意:未定义的属性:第23行的/apache/test.php中的SoapClient :: $ AccountsGetXMLResult

很明显,我需要帮助解剖回复。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

试试这个:

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

print_r($result);