Bonjour,

Je reviens avec un nouveau soucis pour appliquer cette fameuse méthode.

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
<sdx:result>
	<article id="N2004-LA-0151">
        <info> 
			<coverage>
				<place>
					<geoname>
						<location>
							<region code="91" role="region" scheme="insee"> Languedoc-Roussillon </region>
							<region code="11" role="departement" scheme="insee"> Aude </region>
							<locality code="396" role="commune" scheme="insee"> Trausse </locality>
						</location>
					</geoname>
				</place>
			</coverage>
			<coverage>
				<place>
					<geoname>
						<location>
			                <region code="91" role="region" scheme="insee"> Languedoc-Roussillon </region>
							<region code="11" role="departement" scheme="insee"> Aude </region>
							<locality code="315" role="commune" scheme="insee"> Rieux-Minervois </locality>
						</location>
					</geoname>
			    </place>
			</coverage>
			<coverage>
				<place>
					<geoname>
						<location>
							<region code="91" role="region" scheme="insee"> Languedoc-Roussillon </region>
							<region code="11" role="departement" scheme="insee"> Aude </region>
							<locality code="433" role="commune" scheme="insee"> Villeneuve-Minervois </locality>
						</location>
					</geoname>
				</place>
			</coverage>
		</info>
	</article>
	<article id="N2004-LA-0341">
        <info> 
			<coverage>
				<place>
					<geoname>
						    <region code="91" role="region" scheme="insee">    Languedoc-Roussillon   </region>
							<region code="30" role="departement" scheme="insee"> Gard </region>
							<locality code="006" role="commune" scheme="insee"> Aimargues </locality>
					</geoname>
				</place>
			</coverage>
			<coverage>
				<place>
					<geoname>
						<location>		        
						    <region code="91" role="region" scheme="insee"> Languedoc-Roussillon </region>
							<region code="30" role="departement" scheme="insee"> Gard </region>
							<locality code="169" role="commune" scheme="insee"> Milhaud </locality>
						</location>
					</geoname>
			    </place>
			</coverage>
			<coverage>
				<place>
					<geoname>
						<location>					
							<region code="91" role="region" scheme="insee"> Languedoc-Roussillon </region>
						    <region code="34" role="departement" scheme="insee"> Hérault </region>
							<locality code="145" role="commune" scheme="insee"> Lunel </locality>
						</location>
					</geoname>
				</place>
			</coverage>
		</info>
	</article>
</sdx:result>
Je voudrai extraire les données géographiques par article sans faire de répétitions sur les régions et les départements. Dans l'exemple, cela donnerai quelque chose de ce style :

article N2004-LA-0151
Languedoc-Roussillon > Aude > Trausse ; Rieux-Minervois ; Villeneuve-Minervois

article N2004-LA-0341
Languedoc-Roussillon > Gard > Aimargues ; Milhaud
Hérault > Lunel
Mon fichier XSL pour le moment :

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
 
<xsl:key name="region" match="adfi:location/adfi:region[@role='region']" use="."/>
<xsl:key name="dpt" match="adfi:location/adfi:region[@role='departement']" use="."/>
<xsl:key name="commune" match="adfi:location/adfi:locality" use="."/>
 
 
 
<xsl:template match="adfi:article">
 
	<xsl:value-of select='@id'/> 
 
	<xsl:for-each select="//adfi:region[@role='region' and generate-id() = generate-id(key('region', .)[1])]"> 
 
		<xsl:variable name="vregion" select="." />
		<xsl:value-of select="$vregion" />
 
		<xsl:for-each select="//adfi:region[@role='departement' and generate-id() = generate-id(key('dpt', .)[1]) and ../adfi:region[@role='region']=$vregion]"> 
 
			<xsl:variable name="vdpt" select="." />
			<xsl:value-of select="$vdpt" />
			<xsl:text> (</xsl:text>
			<xsl:value-of select="@code" />
			<xsl:text>) > </xsl:text>
 
			<xsl:for-each select="//adfi:locality[generate-id() = generate-id(key('commune', .)[1]) and ../adfi:region[@role='region']=$vregion and ../adfi:region[@role='departement']=$vdpt]"> 
 
				<xsl:value-of select="." />
				<xsl:text> ; </xsl:text>
 
			</xsl:for-each>
			<br/>
		</xsl:for-each>
	</xsl:for-each>
	<br/>
 
</xsl:template>
Je dois forcément être dans cette template. Je me demandais si je devais ajouter une xsl-key sur mon id d'article, car pour le moment, à cause des // devant mes for-each, j'ai tous mes articles qui sont traités... Mais en étant dans la template, je devrai avoir un traitement par article...

J'ai testé plusieures choses, mais je me suis emmêlée, n'hésitez pas à me donner un coup de main si vous y voyez clair.