Récupération d'infos dans un XML
Bonjour le Forum,
Je bute sur un truc certainement très simple.
Je vous explique.
J'ai un XML de ce format
Code:
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 :
Code:
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)) |
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.
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