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:
La réponse est stockée dans ma variable $apiResponse et voici comment je "traduis" celle-ci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Le résultat qui en ressort est mauvais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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:
Car il me faut ensuite pouvoir les "isoler" afin d'associer le bon numéro d'ordre au bon résultat de disponibilité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [available] => 1 [name] => 2012050901789 [available] => 0 [name] => 2012050901761 [available] => 0 [name] => 2012050901506
Quand je pouvais n'en envoyer qu'un seul, je faisais mon interprétation ainsi:
Merci à tous pour vos conseils,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) }
Damien
Voici mes fonctions qui sont appelées dans mes commandes PHP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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){ }
Partager