Bonjour
Comme souvent, je bute sur la création d'une fonction récursive
Mon but est de parser un fichier xml et d'enregistrer les informations contenu dans ce fichier tout en gardant la hiérarchie des "objets" du fichier XML
Pour mieux comprendre, prenons un exemple de XML
Code xml : 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 <Structure> <Object>Objet 1</Object> <Children> <Structure> <Object>Objet 1.1</Object> </Structure> <Structure> <Object>Objet 1.2</Object> <Children> <Structure> <Object>Objet 1.2.1</Object> </Structure> </Children> </Structure> </Children> </Structure>
Donc une structure à un objet parent qui peut avoir des enfants. Ces enfants peuvent eux même avoir des enfants
Mon but est donc de récupérer ces informations dans des objets python tout en conservant la hiérachie
J'ai donc pense avoir un dictionnaire avec pour clé le parent et pour valeur la liste des enfants (qui contiendra un dictionnaire si elle n'est pas vide)
Je suis libre de choisir la structure python pour cela donc n'hésitez pas à me proposer autre chose si besoin
Dans notre exemple, le résultat que j'ai imaginé sera le suivant :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part { Objet 1 : [ {Objet 1.1 : [ ] , Objet 1.2 : [ { Objet 1.2.1 : [] } ] ] }
Pour ce faire, j'ai créé une fonction que voici :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def GetChildren(structure): childList = [] objRef = '' for node in structure.childNodes: if node.nodeType == minidom.Node.ELEMENT_NODE and node.nodeName == "Object": objRef = node.childNodes[1].firstChild.data.encode("mbcs") elif node.nodeType == minidom.Node.ELEMENT_NODE and node.nodeName == "Children" : for child in node.childNodes: if child.nodeType == minidom.Node.ELEMENT_NODE and child.nodeName == "Structure": childList.append(child.childNodes[1].childNodes[1].firstChild.data.encode("mbcs")) r = GetChildren(child) return {objRef : childList} print GetChildren((structure)
Mon problème est le suivant ; je ne récupère que les fils directs de Objet 1 (donc Objet 1.1 et Objet 1.2) alors que je parcours ma fonction en pas à pas, je vois bien que dans childList, la valeur Objet 1.2.1 est présente mais je la perd tout à la fin![]()
Ca doit être une petite bêtise mais je vois pas ou
Partager