Bonjour à tous,
Avant de vous exposer mon problème, voici un échantillon de mon fichier :
Dans mon fichier, chaque article de @type "commune" a un code INSEE placé dans l'élément <insee>.
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 <DICTIONNAIRE departement="Aisne" dep="02"> <article id="DT02-00001" pg="1"> <vedette> <pg>1</pg> <sm>Abancourt,</sm> </vedette> <definition> <typologie>fief</typologie>, <localisation>commune de <commune precision="certain">Brenelle</commune> </localisation>*; <typologie>vassal</typologie> de <localisation>Pontarcy</localisation>. </definition> </article> <article type="commune" id="DT02-00830" pg="39"> <vedette> <sm>Brenelle,</sm> </vedette> <definition> <localisation>canton de Braine</localisation>. </definition> <insee>02120</insee> </article> <article id="DT02-00003" pg="1"> <vedette> <sm>Abbaye (L),</sm> </vedette> <definition> <typologie>ferme et moulin à eau</typologie>, <localisation>commune de <commune precision="certain">Bucilly</commune> </localisation>. </definition> </article> <article type="commune" id="DT02-00926" pg="43"> <vedette> <sm>Bucilly,</sm> </vedette> <definition> <localisation>canton dHirson</localisation>. </definition> <insee>02131</insee> </article> <article id="DT02-02196" pg="109"> <vedette> <sm>Ferrières,</sm> </vedette> <definition> <typologie>ferme</typologie>, <localisation>commune de <commune precision="certain">la Ferté-Chevresis</commune> </localisation>.</definition> </article> <article type="commune" id="DT02-02197" pg="109"> <vedette> <sm>Ferté-Chevresis (La),</sm> </vedette> <definition> <localisation>canton de Ribemont</localisation>. </definition> <insee>02306</insee> </article> </DICTIONNAIRE>
Les articles concernant des fermes, hameaux, moulins, etc., se trouvant dans une commune n'ont quant à eux pas de code INSEE, et je souhaite leur attribuer celui de leur commune de rattachement, que j'ai identifiée grâce à l'élément <commune> dans <localisation>.
Pour ce faire, il faut que je compare le contenu de mes éléments <commune> avec celui de tous les vedette/sm de mon fichier (sachant que le nom des communes n'est pas toujours écrit de la même manière dans l'un et dans l'autre comme c'est le cas pour la Ferté-Chèvresis dans cet exemple), et ainsi récupérer le code INSEE pour le mettre dans un élément <insee_commune>.
J'ai essayé d'écrire une XSLT mais je n'ai pas réussi...
Voilà ce que j'ai fait :
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="node() | @*"> <!-- Copie à l'identique du fichier XML --> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="article[not(@type)]"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> <xsl:if test="contains(DICTIONNAIRE/article/vedette/sm[1], definition/localisation[1]/commune)"> <xsl:element name="insee_commune"> <xsl:value-of select="DICTIONNAIRE/article/insee"/> </xsl:element> </xsl:if> </xsl:copy> </xsl:template> </xsl:stylesheet>
J'ai également tenté cela :
Je ne sais plus trop comment faire...
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="node() | @*"> <!-- Copie à l'identique du fichier XML --> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="DICTIONNAIRE"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> <xsl:if test="contains(../vedette/sm[1], definition/localisation[1]/commune)"> <xsl:for-each select="article[not(@type)]"> <xsl:element name="insee_commune"> <xsl:value-of select="article/insee"/> </xsl:element> </xsl:for-each> </xsl:if> </xsl:copy> </xsl:template> </xsl:stylesheet>
Pouvez-vous m'aider ?
Merci !
Partager