Comparer des chaînes de caractères et ajouter un élément à partir du contenu d'un autre élément
Bonjour à tous,
Avant de vous exposer mon problème, voici un échantillon de mon fichier :
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
| <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> |
Dans mon fichier, chaque article de @type "commune" a un code INSEE placé dans l'élément <insee>.
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:
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 :
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
| <?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> |
Je ne sais plus trop comment faire...
Pouvez-vous m'aider ?
Merci ! :)