IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Comparer des chaînes de caractères et ajouter un élément à partir du contenu d'un autre élément


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Par défaut 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 : 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 d’Hirson</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 : 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 :

    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>
    Je ne sais plus trop comment faire...
    Pouvez-vous m'aider ?
    Merci !

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Par défaut
    Est-ce que quelqu'un aurait une idée qui pourrait m'aider ?

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je veux dire, ton problème c'est qu'un e avec accent c'est pas la même chose qu'un e sans accent. Donc bon ben 'faut convertir tes chaînes en une sorte de version canonique de manière d'écrire un nom de ville.

    De toute façon je te l'ai déjà dit, ce que tu fais là c'est pas transformer des données, c'est ajouter des nouvelles données. Un ordinateur c'est pas fait pour ça. C'est pour ce genre de travail qu'on a des humains, il faut bien que les sacs à viande servent à quelque chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Par défaut
    Oui c'est justement mon but d'ajouter de la donnée pour enrichir mes fichiers, mais je veux pouvoir l'automatiser car j'ai de nombreux fichiers, qui sont eux-mêmes très lourds. Si je pouvais le faire manuellement, je le ferais, ce serait beaucoup plus simple, mais ce n'est pas possible.
    Là ce ne sont pas tellement les accents qui me posent problème, c'est plutôt le fait que les mots ne soient pas écrits dans le même ordre dans les deux endroits que je souhaite comparer (par exemple "Ferté-Chevresis (La)" et "la Ferté-Chevresis").
    Et je n'arrive pas à écrire ma règle XSL pour que ça fonctionne.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Commence déjà par te demander comment tu expliquerais à un enfant de 7 ans que ces deux villes qui ne s'écrivent pas pareil sont censées être les mêmes, parce qu'en changeant ceci ou cela on finit par avoir la même chose.
    Si tu ne peux pas faire ça, tu es pas prête de pouvoir le faire avec un ordinateur.

    A part ça, c'est une chose de vouloir faire de la création de données automatique avec un ordinateur, mais dans ce cas il vaut mieux utiliser un langage de programmation pour décrire les données avec lesquelles on travaille. Un langage de transformation ça ne va pas t'aider.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 26
    Par défaut
    Quel langage de programmation je peux utiliser pour faire ça alors ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/11/2015, 13h14
  2. Comparer des chaînes de caractères
    Par aurelie689 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 02/05/2009, 13h22
  3. Problème sur des chaînes de caractères
    Par Anonymous dans le forum Access
    Réponses: 9
    Dernier message: 16/09/2005, 08h21
  4. Passage des chaînes de caractères à une application CGI
    Par Thom@s dans le forum Composants VCL
    Réponses: 10
    Dernier message: 03/12/2004, 00h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo