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 :

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))
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