2012-05-22 132 views
2

我正在使用wsdl文件,並從整個過程中學習了很多。PHP解析對象(stdClass)響應

我實例化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公告:未定義的屬性:SoapClient的:: $ AccountsGetXMLResult在/apache/test.php在線23

所以很明顯,我需要與解剖響應的幫助。

+1

的'#2 (3)'意味着它是該進程的第二個stdClass實例,並且該對象有三個屬性。 – jnrbsn

回答

1

$webservice->AccountsGetXML()返回stdClass的對象,其屬性顯示在var dump中。 stdClass只是一個「空的佔位符類」,沒有任何預定義的屬性或方法。要訪問你看到的屬性,在返回值$webservice->AccountsGetXML()工作:

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

這也是這樣的:

echo $webservice->AccountsGetXML()->AccountsGetXMLResult->any; 
+0

+1以獲得徹底和快速的答案。 –

0

試試這個:

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

print_r($result); 
+0

他沒有使用JSOn –

+0

我知道他沒有使用JSOn,只是將響應轉換爲JSOn,然後立即將其轉換回PHP數組,允許他以PHP數組的形式訪問它。有用。 –

+0

@ClintDecker嘿,這對我很好。似乎沒有其他工作。它將SOAP XML完美地轉換爲PHP數組,所以謝謝! – StuyvesantBlue