Bonjour,
Je me prends la tête depuis quelques jours sur le traitement un peu spécial d'un fichier XML. Voilà le topo:
- Je poste un xml à un web service et je reçois en retour un fichier xml de réponse.
- Je transforme ce fichier xml en un fichier xml à un seul niveau
- J'utilise ce fichier xml un niveau pour remplir un fichier modèle
J'ai créé la fonction suivante qui permet de transformer le xml en un array en gardant l'arborescence du xml.
exemple:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <reponse> <node> <adress>toto</adress> <cp>00000</cp> </node> <node> <adress>tata</adress> <cp>00000</cp> </node> </reponse>
Donnerait donc dans l'array:
Le code:[response1_node1_adress1] => toto [response1_node1_cp1] => 00000 [response1_node2_adress1] => tata [response1_node2_cp1] => 11111
le problème est que dans mon fichier xml j'ai certain noeud qui n'ont que des attributs et pas de text (textnode) que je dois aussi pouvoir récupérer et créer une entrée dans l'array.
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
28
29 <?php function parseNode($node, $name, &$arr) { $child_count = 0; $children = $node->childNodes; $count = 0; $map = array(); foreach ($children as $child) { if ($child->nodeType == XML_ELEMENT_NODE) { if (!isset($map[$child->nodeName])) $map[$child->nodeName] = 0; $map[$child->nodeName]++; parseNode($child, $name . "_" . $child->nodeName . $map[$child->nodeName],$arr); $count++; } } if ($count == 0) { $name = substr($name,1); if (! empty($node->nodeValue) ) $arr[$name] = $node->nodeValue; //$arr[$name] = $node->nodeValue; } return $arr; } $file = "fichier.xml"; $dom = new DOMDocument; $dom->load($file); $arr = parseNode($dom->documentElement, "",$arr); echo "<pre>"; print_r($arr); echo "</pre>"; ?>
J'ai fait pas mal de test avec des getAttribute, mais je n'y arrive pas. Je pense être trop dans le code, et je dois prendre un peu de recul, et demander de l'aide pour arriver à mes fins.
Pour ensuite réécrire un nouveau xml avec les informations de l'array, pas de problème, ni pour exploiter le nouveau xml pour remplir mes fichiers modèles. Je devrai pouvoir m'e sortir assez simplement
sur ces deux dernières partie.
J'espère donc que vous pourrez me filer un coup de patte sur la partie "remise sur un seul niveau".
Partager