Bonjour,

Je travaille actuellement avec iReport et pour la première fois je suis confronter aux requêtes XPath. Pour commencer, voici mon fichier XML

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
<env id="41">
 
	<name>Habilitations</name>
 
	<!-- Definition des services -->
	<service id="411" envid="41 ">
		<name>Hopital</name>
	</service>
	<service id="412" envid="41 ">
		<name>Clinique</name>
	</service>
 
	<!-- Definition des sous-services du service Hopital -->
	<sous-service id="413" envid="411">
		<name>Bloc Chirurgical</name>
	</sous-service>
	<sous-service id="414" envid="411">
		<name>Urgence</name>
	</sous-service>
 
	<!-- Definition des sous-services du service Clinique -->
	<sous-service id="415" envid="412">
		<name>Pediatrie</name>
	</sous-service>
	<sous-service id="416" envid="412">
		<name>Maternite</name>
	</sous-service>
 
	<!-- Groupe d'utilisateurs du sous-service Bloc Chirurgical-->
	<groupe id="417" envid="413">
		<name>Chirurgiens</name>
	</groupe>
	<groupe id="418" envid="413">
		<name>Anesthesiste</name>
	</groupe>
 
	<!-- Clement a ete defini dans le groupe chirurgien et reutilise dans le groupe Anesthesiste-->
	<user id="419" envid="417">
		<name>Clement</name>
	</user>
	<user id="419" envid="418" reused="true">
		<name>Clement</name>
	</user>
 
	<!-- Christophe a ete defini directement dans le groupe Anesthesiste -->
	<user id="420" envid="418">
		<name>Christophe</name>
	</user>
 
	<!-- Estelle a ete defini dans le sous-service Bloc Chirurgical et reutilise dans le groupe Chirurgiens -->
	<user id="421" envid="413">
		<name>Estelle</name>
	</user>
	<user id="421" envid="417" reused="true">
		<name>Estelle</name>
	</user>
 
	<!-- Loic a ete defini dans le sous-service Urgence -->
	<user id="422" envid="414">
		<name>Loic</name>
	</user>
 
	<!-- Damien a ete defini dans le sous-service Pediatrie du service clinique-->
	<user id="423" envid="415">
		<name>Damien</name>
	</user>
 
	<!-- Thibaud a ete defini dans le sous-service Maternite du service clinique -->
	<user id="424" envid="416">
		<name>Thibaud</name>
	</user>
 
	<!-- Guillaume a ete defini dans le group chirurgien du sous-service Bloc chirurgical et reutilise dans le sous service Maternite du service Clinique -->
	<user id="425" envid="417">
		<name>Guillaume</name>
	</user>
	<user id="425" envid="416" reused="true">
		<name>Guillaume</name>
	</user>
 
	<!-- Le groupe Direction est defini dans le sous-service Bloc-chirurgical -->
	<groupe id="426" envid="413">
		<name>Direction</name>
	</groupe>
 
	<!-- Le groupe Direction est reutilise dans le sous-service Pediatrie-->
	<groupe id="426" envid="415" reused="true">
		<name>Direction</name>
	</groupe>
 
	<!-- Le groupe Direction est reutilise dans le sous-service Maternite-->
	<groupe id="426" envid="416" reused="true">
		<name>Direction</name>
	</groupe>
 
	<!-- Ci-dessous les utilisateurs definie dans le groupe Direction -->
	<user id="427" envid="426">
		<name>Yannick</name>
	</user>
	<user id="428" envid="426">
		<name>Olivier</name>
	</user>
	<!-- Tenter de rajouter Loic egalement-->
	<user id="422" envid="426" reused="true">
		<name>Loic</name>
	</user>
 
	<!-- Creation d'un groupe sage femme dans le sous-service Maternite-->
	<groupe envid="416">
		<id>429</id>
		<name>Sages femmes</name>
	</groupe>
 
	<!-- Creation d'un user présent dans le groupe sage-femme du sous-service Maternite et réutilisé dans le groupe chirurgiens du sous-service Bloc Chirurgical (ce sont des sous-services de services différents) -->
	<user envid="429">
		<id>430</id>
		<name>Dominique</name>
	</user>
 
	<user envid="417" reused="true">
		<id>430</id>
		<name>Dominique</name>
	</user>
 
 
</env>
Je souhaite récupérer les users qui sont directement attaché à un sous-service (via envid) ou indirectement via un sous-groupe (les liaisons se font par l'attribut envid). Après récupération des users je veux faire un distinct sur les attributs id des users.

Voici la requête que j'utilise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
/env/user[not(@id = preceding-sibling::user[(@envid=(/env/groupe[@envid='$P{FM_SOUS_SERVICE_ID}']/@id)) or (@envid='$P{FM_SOUS_SERVICE_ID}')]/@id)]
Le problème est que le "distinct" n'est pas toujours fait correctement ? Quelqu'un a-t-il une idée pour faire ça. Je suis preneur en XPATH et/ou en XPATH2

Je vous remercie par avance,