Soap wsdl renvoi tableau multidimentionnel xml
samfp123
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
samfp123 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
samfp123 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai besoin d'un très simple et basique exemple d'utilisation SOAP avec php pour créer un service web avec le résultat sera en format XML.
J'ai trouvé une solution utilisant nusoap.php mais elle me renvoi une chaine de caractère.
Voila un petit exemple:
J'ai une table pr_processus(id,refernce,date,libelle)
Je veut créer un service web qui renvoi la liste des processus d'une date définie (le résultat est composé d'une ou plusieurs ligne ou bien rien si rien n'est trouvé)
Le code coté client est comme-çi:
Au coté serveur, j'ai créer un fichier getprocessus.php comme suit:
Juste là tout ça marche bien et le client obtient une chaine de caractère, la réponse SOAP est comme-çi:
Le problème c'est que je veut le résultat sera renvoyé sous format XML et pas une chaine, d'après que j'ai compris de mes recherche je doit utiliser WDSL. Comment procéder ?
Quelqu'un peut m'aider?
et merci
J'ai besoin d'un très simple et basique exemple d'utilisation SOAP avec php pour créer un service web avec le résultat sera en format XML.
J'ai trouvé une solution utilisant nusoap.php mais elle me renvoi une chaine de caractère.
Voila un petit exemple:
J'ai une table pr_processus(id,refernce,date,libelle)
Je veut créer un service web qui renvoi la liste des processus d'une date définie (le résultat est composé d'une ou plusieurs ligne ou bien rien si rien n'est trouvé)
Le code coté client est comme-çi:
<?php
require_once "lib/nusoap.php";
$client = new nusoap_client("http://localhost/sttpb/services/getprocessus.php");
$error = $client->getError();
if ($error) echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
$result = $client->call("getprocessus", array("date"=>"jj/mm/yyyy"));
if ($client->fault) {
echo "<h2>Fault</h2><pre>";
print_r($result);
echo "</pre>";
}
else {
$error = $client->getError();
if ($error) echo "<h2>Error</h2><pre>" . $error . "</pre>";
else {
echo "<h2>Result:</h2>";
echo $result;
}
}
Au coté serveur, j'ai créer un fichier getprocessus.php comme suit:
<?php
require_once "lib/nusoap.php";
function getprocessus($date){
$db=new PDO('mysql:host=localhost;dbname=logidb', 'root', '',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$query="select id,reference,libelle from pr_processus";
if(isset($date))
if($date!=""){
$stm=$db->prepare($query." where date=?");
$stm->execute($date)
}
else{
$stm=$db->prepare($query);
$stm->execute()
}
$result=$stm->fetchall(PDO::FETCH_ASSOC);
return join(",",$result);
}
$server = new soap_server();
$server->register("getprocessus");
$server->service($HTTP_RAW_POST_DATA);
?>
Juste là tout ça marche bien et le client obtient une chaine de caractère, la réponse SOAP est comme-çi:
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 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/">
<SOAP-ENV:Body>
<ns1:getProdResponse xmlns:ns1="http://tempuri.org">
<return xsi:type="xsd:string">
1,p1/2018,processus1,2,p2/2018,processus2,3,p3/2018,processus3
</return>
</ns1:getProdResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Le problème c'est que je veut le résultat sera renvoyé sous format XML et pas une chaine, d'après que j'ai compris de mes recherche je doit utiliser WDSL. Comment procéder ?
Quelqu'un peut m'aider?
et merci
A voir également:
- Soap wsdl renvoi tableau multidimentionnel xml
- Tableau word - Guide
- Tableau ascii - Guide
- Xml download - Télécharger - Édition & Programmation
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
mais je veut que le résultat sera sous la forme
<response>
<processus>
<id>1</id>
<refernce>p1/2018</refernce>
<libelle>processus1</libelle>
</processus>
<processus>
<id>2</id>
<refernce>p2/2018</refernce>
<libelle>processus2</libelle>
</processus>
<processus>
<id>3</id>
<refernce>p3/2018</refernce>
<libelle>processus3</libelle>
</processus>
</response>
J'ai essayé de créer cette chaine avec deux boucle for imbriqué mais lorsque j'affiche la réponse les symboles "<" et ">" sont remplacés par les code html & < et &>
J'ai constaté de mes recherche que je doit créer un type complexe wsdl, je l'ai essayé mais je n'arrive pas à lire le resultat
Avec soap ta communication se fera sous le format xml (comme tu l'as remarqué), ce qui implique que si tu souhaites passer aussi du contenu xml dans une réponse, il va falloir que gère son échappement.
Complexe pas complexe, beaucoup ont l'habitude de donner des explications ou tutoriel qui découragent mais avec un autre angle de vue c'est plus simple. dans ton cas :
perso ce format semble être suffisant -> c'est toujours la même chose : tu dois interpréter une réponse. Or dans ton cas tu gères la génération et l'interprétation de la réponse, je ne vois donc pas pourquoi tu veux t'embêter à changer ce format mais passons.
Pour répondre à la "question " remplacés par les code html & < et &> , la raison pour laquel on va avoir ce format c'est simplement de manière à ce que ton navigateur ne le considère pas qutrement que comme une chaine de caractères (ce qui doit être le cas vu que c'est à ton process qu'il est destiné).
Et donc, tu n'as plus qu'a retirer l’échappement de caractères, soit remplacer dans ton texte &<; par < etc.
Une autre solution est de d'utiliser la section CDATA, quelques infos :
https://en.wikipedia.org/wiki/CDATA
Mais sans voir ni le code qui génère la réponse, ni celui qui va l interpréter, je ne peux pas t'aider plus
naga