Bonjour,
Je reviens avec un nouveau soucis pour appliquer cette fameuse méthode.
Mon fichier XML :
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 :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
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>
Mon fichier XSL pour le moment :Citation:
article N2004-LA-0151
Languedoc-Roussillon > Aude > Trausse ; Rieux-Minervois ; Villeneuve-Minervois
article N2004-LA-0341
Languedoc-Roussillon > Gard > Aimargues ; Milhaud
Hérault > Lunel
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...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 <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>
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.
:merci: