2009-09-24 7 views
0

donc avoir réussi à se fissurer se nusoap pour interroger le serveur ChemSpider pour obtenir des informations mais je reçois une réponse qui affiche à l'aide print_r mais lors de l'utilisation d'impression affiche simplement Array.Comment puis-je analyser cette réponse de nusoap à une variable php/array

Ma question est-ce vraiment, comment puis-je prendre la réponse donnée et la transformer en un tableau PHP

Le code pour le client 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>'; 
?> 

Cela donne la sortie suivante (moins le débogage informations):

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> 
+0

Votre question est mal, il semble. Vous avez déjà un tableau parfaitement utilisable, à savoir $ result. Votre question semble être "Pourquoi sort-il 'Array' quand j'écho $ result;?". Voir ma réponse donnée ci-dessous. – Duroth

+0

En effet. Je ne faisais que de la difficulté à comprendre ce qui était à l'origine du problème –

Répondre

0

Dans le script que vous utilisez, la réponse a déjà été analysé à un tableau PHP appelé $ result. Vous avez déjà le tableau imprimé dans la sortie.

Votre question est, pour autant que je peux voir, le fait que l'impression() et echo() ne fonctionnent pas bien sur les tableaux. Ils sortent simplement le type (Array) au lieu du contenu.

Vous pouvez appeler la sortie de résultat $ avec

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

Vous pouvez en savoir plus sur la gamme de PHP dans le traitement des PHP Manual.

0

vous voulez analyser la réponse $ client->? essayez d'exploser ('\ n', $ client-> réponse) et explode (':', each_string de $)

+0

Merci pour la suggestion mais il se trouve que la suggestion fixée au-dessous du problème. Merci beaucoup pour essayer si –

Questions connexes