IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] Traiter un retour XML en provenance d'une API


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    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 : 1
    Points
    1
    Par défaut [XML] 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 : 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>
    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
    $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 : 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
    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 : 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)
    }
    Merci à tous pour vos conseils,
    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){
    }

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Les fichiers XML prennent de la place ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Donc utilise SimpleXML

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/01/2015, 09h59
  2. Validation XML avec XSD provenant d'une BDD
    Par Yoyo17 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 29/10/2012, 09h55
  3. [DOM] Charger un fichier XML provenant d'une URL
    Par ovni dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/05/2011, 11h42
  4. [XML] Parser un shema XML provenant d'une réponse SOAP
    Par acidline dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 05/05/2010, 11h40
  5. parser un flux xml provenant d'une anim flash
    Par pyd001 dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo