Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/05/2012, 02h43   #1
diatonis
Invité de passage
 
Homme
Technicien réseaux et télécoms
Inscription : mai 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseaux et télécoms
Secteur : Santé

Informations forums :
Inscription : mai 2012
Messages : 2
Points : 0
Points : 0
Par défaut Traiter un retour XML en provenance d'une API

Bonjour à tous,

Je viens de m'inscrire sous un nouveau compte (ne trouvant plus mon ancien identifiant) afin de solliciter votre aide dans le traitement d'un retour XML.

On transmet à un laboratoire des ordonnances pour des analyses sanguines.
Celui-ci nous nous répond un OK avec un numéro d'ordre qui nous permettra par le suite de suivre la disponibilité des résultats.

Ils ont changés subitement le système, et maintenant il faut envoyer les numéros d'ordres séparés par des virgules (pas de soucis), mais c'est le retour de l'API que je n'arrive pas à traiter, voici le retour:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<api>
    <response>
         <trID>API-2ddb60b10052012070311</trID>
         <result code="200">
              <msg>command completed successfully</msg>
         </result>
    </response>
    <resData>
         <medialog_chkResult>
              <name available="1">2012050901789</name>
              <name available="0">2012050901761</name>
              <name available="0">2012050901506</name>
         </medialog_chkResult>
    </resData>
</api>
La réponse est stockée dans ma variable $apiResponse et voici comment je "traduis" celle-ci.
Code :
1
2
3
4
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "contents");
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, FALSE);
Le résultat qui en ressort est mauvais:
Array
(
[trID] => API-2ddb60b10052012070311
[code] => 200
[msg] => command completed successfully
[available] => 0
[name] => 2012050901789;2012050901761;2012050901506
)

Pour les disponibilités des examens, 1 était disponible (available="1") et 2 non disponibles (available="0") or dans mon Array, je n'ai plus que [available] => 0.

De même que pour les numéros d'ordres, ils sont tous fusionnés ...

Je ne parviens pas à trouver comment faire pour avoir ce résultat:
Code :
1
2
3
4
5
6
[available] => 1
[name] => 2012050901789
[available] => 0
[name] => 2012050901761
[available] => 0
[name] => 2012050901506
Car il me faut ensuite pouvoir les "isoler" afin d'associer le bon numéro d'ordre au bon résultat de disponibilité.

Quand je pouvais n'en envoyer qu'un seul, je faisais mon interprétation ainsi:
Code :
1
2
3
4
5
if ( $nodes["available"] == "0" ) {
//Ma commande de MAJ en BDD (résultats dispo)
} else {
//Ma commande de MAJ en BDD (résultats non dispo)
}
Merci à tous pour vos conseils,
Damien


Voici mes fonctions qui sont appelées dans mes commandes PHP.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$current_tag="";
$nodes = array();
 
function contents($parser, $name){
global $current_tag, $nodes;
       $cur_name = ltrim(str_replace("\n", "", $name));
 
       if ( $cur_name != '') {
               if ( !isset($nodes[$current_tag]) ) {
               $nodes[$current_tag] = $cur_name;
               }
               else {
               $nodes[$current_tag] .= ";" . $cur_name;
               }
       }
}
 
function startTag($parser, $name, $attrs){
global $current_tag, $nodes;
$current_tag = $name;
       while (list($k, $v) = each($attrs)) {
       $nodes[$k] = $v;
       }
}
 
function endTag($parser, $name){
}
diatonis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2012, 10h39   #2
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Les fichiers XML prennent de la place ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2012, 16h45   #3
diatonis
Invité de passage
 
Homme
Technicien réseaux et télécoms
Inscription : mai 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseaux et télécoms
Secteur : Santé

Informations forums :
Inscription : mai 2012
Messages : 2
Points : 0
Points : 0
Bonjour stealth35,

Non les XML ne prennent pas trop de place, les requêtes sont envoyées lorsqu'un secrétariat demande à savoir s'ils peuvent passer prendre les résultats.

Cordialement,
Damien
diatonis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2012, 17h02   #4
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Donc utilise SimpleXML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h12.


 
 
 
 
Partenaires

Hébergement Web