CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème parsing XML

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
Hookson35
Hookson35
Niveau 8
29 novembre 2016 à 15:42:11

Bonjour à tous :)

Alors voilà, j'ai une fonction PHP qui fait ça

 if (isset($response->catalogue->themes)) {
            foreach ($response->catalogue->themes as $key => $value) {
                foreach ($value->top->part as $part) {
                    $top[] = new Top($part->identifiant, $part->sujet, $part->libelleIncident);
                }
                $catalogue[] = new Theme($value->identifiant, $value->libelleCourt, $value->libelleLong, $value->description, $top, null);
            }
        } else {
            $catalogue = null;
        }

$response c'est la réponse de mon serveur SOAP.
En gros je boucle ici sur tous les "themes" du noeud "catalogue"

Pour vous donner une idée de mes données XML.

<themes>
               <!--Zero or more repetitions:-->
               <theme>
                  <identifiant/>
                  <libelleCourt>App. Bureautique</libelleCourt>
                  <libelleLong>Application bureautique</libelleLong>
                  <description>Suite Office, Adobe Reader, Flash player, Internet Explorer, Firefox</description>
                  <!--0 to 5 repetitions:-->
                  <top>
                     <part>
                        <identifiant/>
                        <sujet>EXCEL</sujet>
                        <libelleIncident>Tableau fractionné</libelleIncident>
                     </part>
                     <part>
                        <identifiant/>
                        <sujet>OUTLOOK</sujet>
                        <libelleIncident>Comment ajouter une archive</libelleIncident>
                     </part>
                  </top>
                  <sujets>
                     <!--Zero or more repetitions:-->
                     <sujet>
                        <identifiant/>
                        <libelleCourt>Outlook</libelleCourt>
                        <libelleLong>Outlook</libelleLong>
                        <incidents>
                           <!--Zero or more repetitions:-->
                           <incident>
                              <identifiant>Outlook_Archive</identifiant>
                              <libelle>Outlook - Création d'une zone d'archivage</libelle>
                              <erreursConnues/>
                           </incident>
                        </incidents>
                     </sujet>
                  </sujets>
               </theme>
            </themes>

Sur ce jeu de données je n'ai pas d'erreur, je récupère bien mon objet dans $catalogue[]
Le problème vient quand j'ai deux <theme> dans mon XML. Il ne boucle pas dessus...
Il faudrait que je fasse ça pour que ça fonctionne foreach ($response->catalogue->themes->'''theme''' as $key => $value)

Mais du coup ça ne fonctionne plus quand j'ai plus qu'un seul <theme>

Comment faudrait-il faire? Est-ce que j'ai la bonne approche? :question:

deepblue
deepblue
Niveau 16
29 novembre 2016 à 16:48:25

Il faudrait tester si ton est une collection d'éléments. Sur un vieux de mes projets :


$xml = simplexml_load_string(file_get_contents($file), 'SimpleXMLElement', LIBXML_NOCDATA);

// Pour travailler avec des array
$json = json_encode($xml);
$array = json_decode($json, true);

if (isset($array['customerList'])) {
    // Le test à la con qui qui fonctionne
    if (!isset($array['customerList']['customer'][0])) {
        $this->importCustomer($array['customerList']['customer']);
    } elseif (isset($array['customerList']['customer'][0])) {
        foreach ($array['customerList']['customer'] as $customer) {
            $this->importCustomer($customer);
        }
    }
}
Hookson35
Hookson35
Niveau 8
29 novembre 2016 à 22:58:11

Le 29 novembre 2016 à 16:48:25 deepblue a écrit :
Il faudrait tester si ton est une collection d'éléments. Sur un vieux de mes projets :


$xml = simplexml_load_string(file_get_contents($file), 'SimpleXMLElement', LIBXML_NOCDATA);

// Pour travailler avec des array
$json = json_encode($xml);
$array = json_decode($json, true);

if (isset($array['customerList'])) {
    // Le test à la con qui qui fonctionne
    if (!isset($array['customerList']['customer'][0])) {
        $this->importCustomer($array['customerList']['customer']);
    } elseif (isset($array['customerList']['customer'][0])) {
        foreach ($array['customerList']['customer'] as $customer) {
            $this->importCustomer($customer);
        }
    }
}

Ok ça me parait pas mal :) mon approche est bonne ou y a plus optimisé pour parser du XML?

deepblue
deepblue
Niveau 16
02 décembre 2016 à 10:26:38

Non ça me semble bon. C'est toujours la merde à parcourir…après y'a toujours plusieurs approches que chaque développeur va plus ou moins aimer. Nous avons la même :ok:

Hookson35
Hookson35
Niveau 8
03 décembre 2016 à 10:09:11

Le 02 décembre 2016 à 10:26:38 deepblue a écrit :
Non ça me semble bon. C'est toujours la merde à parcourir…après y'a toujours plusieurs approches que chaque développeur va plus ou moins aimer. Nous avons la même :ok:

Merci, je reste là dessus :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware