2012-05-22 3 views
2

Я работаю с файлом wsdl и многому учусь от всего процесса.PHP Parsing object (stdClass) Response

Я инстанцирования 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