Bonjour le Forum,
Je bute sur un truc certainement très simple.
Je vous explique.
J'ai un XML de ce format
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
17
18 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE cluster_config SYSTEM "cluster_config.dtd"> <policy> <policy_name>test</policy_name> <policy_member> <sender>x</sender> <receiver>y</receiver> </policy_member> <policy_member> <sender>a</sender> <receiver>b</receiver> </policy_member> <policy_member> <sender>c</sender> <receiver>d</receiver> <receiver>e</receiver> </policy_member> </policy>
Je peux avoir plusieurs policy_member et plusieurs sender/receiver par policy_member.
Le but est de récupérer tous les sender/receiver par policy_member pour une policy donnée, ici toto.
Mon code actuel :
Je n'arrive pas récupérer les senders (les receivers seront récupérés de la même manière) dans le cas où ils sont plusieurs.
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
30
31
32
33
34
35
36 # -*- coding: utf-8 -*- XmlFile = "C:\Test\test.xml" maPolicy = "test" #--------------------------------------------# import xml.etree.ElementTree as ET whitelist = {} def get_policymember(filename, target_policyname): i = 1 policy_member = {} print(type(policy_member)) tree = ET.parse(filename) for policy in tree.iter(tag = 'policy'): policyname = policy.find('policy_name').text if policyname == target_policyname: for var in policy.iter(tag = 'policy_member'): for send in var.iter(tag = 'sender'): listsend = [] sender = send.text listsend.append(sender) policy_member[i] = listsend #print("Sender " + str(i) + " " + sender) for receiv in var.iter(tag = 'receiver'): receiver = receiv.text #print("Receiver " + str(i) + " " + receiver) i = i+1 exit() return get_policymember(XmlFile, maPolicy) #print(type(whitelist))
Objectif d'affichage :
{'1': [x] ,[y], "2" : [a], [b] , '3': [c], [d, e] }
D'après les tests que j'ai fait :
- soit je récupère tous les senders de tous les policy_members
- soit j'écrase à chaque fois et je récupére qu'une seule valeur : seulement le receiver e et je perds le d.
Pouvez-vous me guider svp ?
MiistiK
Partager