Как я могу разобрать этот ответ от nusoap в переменную/массив php

Итак, мне удалось взломать получение nusoap для опроса сервера chemspider для получения информации, однако я получаю ответ, который будет отображаться с помощью print_r, но при использовании print будет просто отображаться Array.

Мой вопрос в том, как мне взять данный ответ и превратить его в массив php

Код для клиента nusoap

<?php
require_once('../lib/nusoap.php');
$client = new nusoap_client('http://www.chemspider.com/Search.asmx?WSDL', 'wsdl');
$err = $client->getError();
if ($err) {
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$query = 'methanol';
$token = 'token';
$result = $client->call(SimpleSearch, array('query' => $query, 'token' => $token), array('return' => 'xsd:string'), "http://www.chemspider.com/SimpleSearch") ;
// Check for a fault
if ($client->fault) {
    echo '<h2>Fault</h2><pre>';
    print_r($result);
    echo '</pre>';
} else {
    // Check for errors
    $err = $client->getError();
    if ($err) {
    // Display the error
    echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
    // Display the result
    echo '<h2>Result</h2><pre>';
    print_r($result);
    echo '</pre>';
}
}



echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
?>

Это дает следующий вывод (минус отладочная информация):

Result

Array
(
    [SimpleSearchResult] => Array
        (
           [int] => 864
        )

 )

Request

POST /Search.asmx HTTP/1.0
Host: www.chemspider.com
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: "http://www.chemspider.com/SimpleSearch"
Content-Length: 489

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns8284="Array"><SOAP-ENV:Body><SimpleSearch xmlns="http://www.chemspider.com/"><query>methanol</query><token>token</token></SimpleSearch></SOAP-ENV:Body></SOAP-ENV:Envelope>

Response

HTTP/1.1 200 OK
x-cspc-fd: search.asmx
x-cspc-fh: chemspider
x-orig-path: /Search.asmx
Set-Cookie: x-dsp=
Set-Cookie: x-d-ond=dond
Set-Cookie: X-Mapping-kckcchol=47DE43E9D82204D9CDBBD4A2610306B8; path=/
Cache-Control: private, max-age=0
x-cspc-pl: 0
Content-Length: 381
x-cspc-hs: chemspider.com
Date: Thu, 24 Sep 2009 08:54:01 GMT
 x-bwcc: pub
 x-dsp: [][]
Connection: close
X-AspNet-Version: 2.0.50727
x-cspc-pt: /Search.asmx
Z-Spider: Hunstman-32-1
x-orig-host: chemspider.com
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SimpleSearchResponse xmlns="http://www.chemspider.com/"><SimpleSearchResult><int>864</int></SimpleSearchResult></SimpleSearchResponse></soap:Body></soap:Envelope>

person Andrew Bailey    schedule 24.09.2009    source источник
comment
Ваш вопрос некорректен, похоже. У вас уже есть вполне пригодный для использования массив, а именно $result. Кажется, ваш вопрос: Почему он выводит «Массив», когда я эхо $result; ?. Смотрите мой ответ ниже.   -  person Duroth    schedule 24.09.2009
comment
Верно. Я просто не мог понять, в чем причина проблемы   -  person Andrew Bailey    schedule 24.09.2009


Ответы (2)


В используемом вами скрипте ответ уже преобразован в массив PHP с именем $result. Вы уже получили массив, напечатанный на выходе.

Ваша проблема, насколько я понимаю, в том, что print() и echo() плохо работают с массивами. Они просто выводят тип (массив) вместо содержимого.

Вы можете вызвать вывод $result с помощью

print $result['simpleSearchResult']['int'] // Will display 864

Подробнее об обработке массивов в PHP можно прочитать в Руководстве по PHP.

person Duroth    schedule 24.09.2009

вы хотите разобрать ответ $client->? попробуйте взорваться ('\n', $client->response) и взорваться (': ', $each_string)

person Valentin Golev    schedule 24.09.2009
comment
Спасибо за предложение, хотя оказывается, что приведенное ниже предложение устранило проблему. Большое спасибо за попытку, хотя - person Andrew Bailey; 24.09.2009