2010-05-12 4 views
0

J'essaye de développer un serveur SOAP très simple et un client en PHP. L'objectif est de recevoir le contenu d'un document XML distant en tant que source.Serveur SOAP et client en PHP

C'est ce que j'ai fait jusqu'à présent, j'ai besoin d'aide pour extraire des données d'un fichier XML à la place, comme c'est le cas maintenant, à partir d'un tableau ordinaire. C'est la fonction trouvée dans inventory_functions.php qui récupère à partir d'un tableau, comment peut-elle être changée pour récupérer à partir du fichier XML à la place? Suis-je sur la bonne voie, est-ce une configuration SOAP?

function getItemCount($upc) { 

    // In reality, this data would be coming from a database 

    $items = array('12345'=>5,'19283'=>100,'23489'=>'234'); 

    // Return the requested value 

    return $items[$upc]; 

} 

C'est le code du serveur:

// Load the database 

    require 'inventory_functions.php'; 

    // Turn off WSDL cache 

    ini_set("soap.wsdl_cache_enabled", "0"); 

    // Create a new SoapServer object with inventory.wsdl 

    $server = new SoapServer("inventory.wsdl"); 

    // Register the getItemCount function 

    $server->addFunction("getItemCount"); 

    // Start the handle 

    $server->handle(); 

C'est le code pour le client:

// Turn off WSDL cache 

ini_set("soap.wsdl_cache_enabled", "0"); 

// Create a new SOAPClient object 

$client = new SoapClient("inventory.wsdl"); 

// Get the value for the function getItemCount with the ID of 12345 

$getItemCount = $client->getItemCount('12345'); 

// Print the result 

echo ($getItemCount); 

S'il vous plaît aider!

+0

pourriez-vous être plus précis sur l'endroit où le XML est impliqué? Est-ce la base de données dans votre commentaire? // En réalité, ces données proviendraient d'une base de données " – Benoit

+0

Le document XML n'a pas encore été développé, l'idée est que je vais chercher du contenu à partir de n'importe quelle source XML. J'ai juste besoin d'utiliser un document XML comme source de données au lieu d'un tableau normal tel qu'il est maintenant. – user339067

Répondre

2

Le problème n'est pas un problème de serveur SOAP, il s'agit d'un accès XML.

En supposant que votre XML contient les mêmes données que le tableau cité dans l'exemple, et vous pouvez obtenir simpleXML sur votre serveur:

//load your xml file into $xmlStr, with file_get_contents() or whatever. 
$xmlObj = simplexml_load_string($xmlStr); 
$items = objectsIntoArray($xmlObj); 

Vous pouvez également utiliser à la place DomDocument, il a une API DOM, donc si vous Connaissez HTML DOM ce sera plus facile.

Dans votre exemple, il a un gros avantage, vous pouvez rechercher le résultat directement dans le fichier XML en utilisant Xpath, au lieu d'utiliser array.

+0

Merci! Cela a l'air intéressant. Donc les $ items ci-dessus sont maintenant un tableau ordinaire? Est-ce que le reste du code a l'air bien (je suis novice en SOAP)? – user339067

+0

C'était la solution exacte pour obtenir des données XML dans une enveloppe SOAP du client vers le serveur. Merci! +1 pour vous –