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 :

Comparaison de chaînes de caractères dans deux fichiers XML, puis insertion de données issues du 2ème fichier [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut Comparaison de chaînes de caractères dans deux fichiers XML, puis insertion de données issues du 2ème fichier
    Bonjour à tous,

    Je cherche à modifier un fichier XML, et en créer un nouveau en output grâce à de l'XSLT, dans lequel seraient insérées des données contenues dans un second fichier XML.
    Pour cela, j'ai besoin de comparer le contenu d'éléments de chacun des fichiers.

    Pour mieux comprendre, voici des extraits des fichiers en question :

    Le premier :


    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <DICTIONNAIRE departement="Ain" dep="01">
     
    <article id="1" pg="1">
    <vedette><sm>Abergement (L'),</sm></vedette>
    <definition><typologie>maison isolée</typologie>, <localisation>commune de Forens</localisation>.</definition>
    </article>
     
    <article id="2" pg="1">
    <vedette><sm>Abergement-Clémenciat (L'),</sm></vedette>
    <definition><typologie>commune</typologie> du <localisation>canton de Châtillon-sur-Chalaronne</localisation>.</definition>
    <commentaire><p>Cette commune fut formée, en <date>1857</date>, des anciennes paroisses de l'Abergement et de Clémenciat qui dépendaient auparavant de la commune de Châtillon-sur-Chalaronne.</p></commentaire>
    <forme_ancienne>- <i>Châtillon-les-Dombes : l'Abergement, hameau ; Clémenciat, hameau,</i> <date>1847</date> <reference>(stat. post.)</reference>.</forme_ancienne>
    </article>
     
    </DICTIONNAIRE>
    Le second :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <communes_dt>
        <toponyme>
            <CODE_DEPT>01</CODE_DEPT>
            <DEPARTEMENT>Ain</DEPARTEMENT>
            <COMMUNE_DT>Abergement-Clémenciat (L')</COMMUNE_DT>
            <NOM_COMMUNE>L'ABERGEMENT-CLEMENCIAT</NOM_COMMUNE>
            <INSEE>01001</INSEE>
        </toponyme>
        <toponyme>
            <CODE_DEPT>01</CODE_DEPT>
            <DEPARTEMENT>Ain</DEPARTEMENT>
            <COMMUNE_DT>Abergement-de-Varey (L')</COMMUNE_DT>
            <NOM_COMMUNE>L'ABERGEMENT-DE-VAREY</NOM_COMMUNE>
            <INSEE>01002</INSEE>
        </toponyme>
    </communes_dt>

    Je souhaiterais donc ici par exemple insérer le code INSEE de la commune de L'Abergement-Clémenciat (<INSEE>01001</INSEE> dans le second fichier) dans l'élément <article> correspondant à cette commune dans mon premier fichier, après avoir procédé à une comparaison de chaînes de caractères (du contenu de<vedette><sm> dans le premier fichier et de <COMMUNE_DT> dans le second), mais je ne sais pas comment faire...

    Je suppose qu'il faut utiliser xsl:document, xsl:analyze-string et des expressions régulières, mais j'avoue que je suis un peu perdue...

    Si quelqu'un a une idée qui pourrait m'aider, je lui serais très reconnaissante !

    Merci par avance !

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Citation Envoyé par Kamkamy Voir le message
    Je suppose qu'il faut utiliser xsl:document,
    Non. On utilise xsl:document quand on veut produire plusieurs documents. Or, si je ne me trompe pas, tu veux juste produire une seule version modifiée de ton document de départ. Aucune raison de faire du xsl:document.

    Par contre, tu vas avoir besoin de la fonction XPath document(), qui va lire des données dans un autre document que celui que tu es en train de transformer.

    Citation Envoyé par Kamkamy Voir le message
    xsl:analyze-string et des expressions régulières
    Je vois pas trop l'intérêt. Peut-être à la rigueur pour se débarrasser de la virgule à la fin du <sm>. Mais tu pourrais peut-être le faire avec substring(), et surtout tu pourrais ajouter une virgule au lieu d'en enlever une.

    Bon, faisons un exemple.

    Si j'ai un document XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <root>
      <a name="fleur"/>
      <a name="arbre"/>
    </root>
    et que je veux le compléter avec le document de référence reference.xml situé dans le même répertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <reference>
      <b name="buisson">nourriture ornement</b>
      <b name="arbre">nourriture ornement opacité bois</b>
      <b name="fleur">ornement</b>
      <b name="herbe">pâturage</b>
    </reference>
    pour que ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <root>
      <a name="fleur">ornement</a>
      <a name="arbre">nourriture ornement opacité bois</a>
    </root>
    On peut le faire avec cette feuille de style :

    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
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
      <!-- copy as-is template -->
      <xsl:template match="node() | @*">
        <xsl:copy>
          <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
      </xsl:template>
     
      <!-- template for the element to modify -->
      <xsl:template match="a">
        <xsl:copy>
          <xsl:copy-of select="@*"/> <!-- copy attributes -->
     
          <!-- insert info completion -->
          <xsl:value-of select="document('reference.xml')/reference/b[@name = current()/@name]"/>
        </xsl:copy>
      </xsl:template>
     
    </xsl:stylesheet>
    Avec cet exemple, tu as tout ce qu'il faut. Plus qu'à adapter à ta situation.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour votre aide @thelvin !!!

    Du coup j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        <xsl:template match="article">
            <xsl:copy>
                <xsl:copy-of select="node() | @*"/>
                <xsl:if test="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/COMMUNE_DT = current()/vedette/sm">
                    <xsl:element name="insee">
                        <xsl:value-of select="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/INSEE[preceding-sibling::COMMUNE_DT = current()/vedette/sm]"/>
                    </xsl:element>
                </xsl:if>
            </xsl:copy>
        </xsl:template>
    Et ça fonctionne !

    Encore merci !

  4. #4
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Bonjour, c'est encore moi !

    Maintenant je souhaiterais ajouter un attribut @ref dans l'élément <article> pour tous les lieux qui ne sont pas des communes, et qui comportent l'élément <localisation>commune de...</localisation>. Cet attribut @ref ferait référence à l'id de l'article concernant la commune que l'on retrouve dans <localisation> (désolée, c'est un peu compliqué).

    Du coup j'ai complété mon précédent code avec ça (le 2ème <xsl:if>) :

    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
    <xsl:template match="article">
            <xsl:copy>
                <xsl:copy-of select="node() | @*"/>
                <xsl:if test="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/COMMUNE_DT = current()/vedette/sm">
                    <xsl:element name="insee">
                        <xsl:value-of select="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/INSEE[preceding-sibling::COMMUNE_DT = current()/vedette/sm]"/>
                    </xsl:element>
                </xsl:if>
                <xsl:if test="contains(definition/localisation,vedette/sm)">
                    <xsl:attribute name="ref">
                        <xsl:value-of select="vedette[@id]"/>
                    </xsl:attribute>
                </xsl:if>
            </xsl:copy>
        </xsl:template>
    Mais oXygen me met ce message d'erreur : "Creating an attribute here will fail if previous instructions create any children"...

    Pourquoi ça ne marche pas ? Qu'est-ce que je dois faire ?

    Merci encore d'avance !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Je te suggère de nous donner une traduction française, faite par tes soins, du message d'erreur que donne oXygen. Nous verrons si cela mène quelque part.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Je traduirais ça comme ça :

    Créer un attribut ici échouera si les instructions précédentes créent un enfant

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Mais oXygen me met ce message d'erreur : "Creating an attribute here will fail if previous instructions create any children"...
    D'abord, ça n'est pas oXygen spécifique si ça pourrait induire quelqu'un à penser, c'est tout-à-fait générique. Cela veut dire qu'on ne peut pas faire appeler à un constructeur d'attribut pour un élément après que les enfants du type d'élément ou de text() de ce même élément parental soient construits, complètement ou partiellement pareillement.

    Dans ce cas-ci, il faut remonter le constructeur de @ref avant <xsl:copy-of select="*|text()" /> et <xsl:element name="insee"> etc... concrètement comme ça.
    Code xslt : 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
    <xsl:template match="article">
            <xsl:copy>
     
                <xsl:if test="contains(definition/localisation,vedette/sm)">
                    <xsl:attribute name="ref">
                        <xsl:value-of select="vedette[@id]"/>
                    </xsl:attribute>
                </xsl:if>
     
                <xsl:copy-of select="node() | @*"/>
     
                <xsl:if test="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/COMMUNE_DT = current()/vedette/sm">
                    <xsl:element name="insee">
                        <xsl:value-of select="document('../Fichiers_XML/appariement.xml')/communes_dt/toponyme/INSEE[preceding-sibling::COMMUNE_DT = current()/vedette/sm]"/>
                    </xsl:element>
                </xsl:if>
     
            </xsl:copy>
        </xsl:template>
    Je n'ai pas envie de commenter sur vedette[@id], je ne sais pas quoi il est, et en tout cas ce n'est pas clairement démontrer, prenant l'échantillon du document posté.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Kamkamy Voir le message
    Créer un attribut ici échouera si les instructions précédentes créent un enfant
    Ah. Du coup il y a "échouera". oXygen te prévient qu'il y a des cas où quelque chose ne va pas marcher.
    Qu'est-ce qui ne va pas marcher ? "Créer un attribut ici"
    Dans quels cas ? "si les instructions précédentes créent un enfant"

    Donc,

    est-ce que tu cherches à créer un attribut ici ? Où est "ici" ?

    est-ce que les instructions précédent "ici" créent un enfant ?

    Si la réponse est "oui" aux deux, oXygen t'informe que du coup, ça ne va pas marcher, parce qu'on ne peut pas faire ça.
    Du coup, qu'est-ce que tu peux faire ? Changer le cas où tu te trouves, pour que ce ne soit pas un cas où ça ne marche pas.

    Par exemple, tu pourrais ne pas créer d'attribut "ici" mais plutôt le faire ailleurs.
    Où ça ? Eh bien, à un endroit où il n'y a pas "d'instruction précédente qui crée un enfant".
    Genre par exemple avant toute instruction qui crée un enfant de l'élément auquel tu essaies d'ajouter un attribut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Hello !

    Alors j'ai essayé de déplacer mon <xsl:if> tout en haut, je n'ai plus de message d'erreur, mais l'attribut ne se crée toujours pas...
    Peut-être que mon <xsl:value of> n'est pas bon, mais je ne vois pas ce que je peux mettre d'autre...

    Voilà mon code:

    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
    <xsl:template match="article">
            <xsl:copy>
                <xsl:if test="contains(definition/localisation,vedette/sm)">
                    <xsl:attribute name="ref">
                        <xsl:value-of select="article[@id]"/>
                    </xsl:attribute>
                </xsl:if>
                <xsl:copy-of select="node() | @*"/>
                <xsl:if test="document('../Fichiers_XML/appariement_virgule.xml')/communes_dt/toponyme/COMMUNE_DT = current()/vedette/sm">
                    <xsl:element name="insee">
                        <xsl:value-of select="document('../Fichiers_XML/appariement_virgule.xml')/communes_dt/toponyme/INSEE[preceding-sibling::COMMUNE_DT = current()/vedette/sm]"/>
                    </xsl:element>
                </xsl:if>            
            </xsl:copy>
        </xsl:template>

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Kamkamy Voir le message
    Peut-être que mon <xsl:value of> n'est pas bon, mais je ne vois pas ce que je peux mettre d'autre...
    Qu'il soit bon ou pas, à partir du moment où tu as fait <xsl:attribute name="ref">, alors il y a un attribut ref, peu importe la suite.
    À la rigueur sa valeur pourrait être vide ou incorrecte, mais en tout cas il est là.

    S'il n'est pas là, c'est que ton <xsl:if> ne se vérifie pas. Point final.

    Citation Envoyé par Kamkamy Voir le message
    mais l'attribut ne se crée toujours pas...
    Tu peux nous montrer un exemple où un tel attribut devrait être créé ?
    Dans ton exemple du début il n'y a jamais de <article> pour lequel contains(definition/localisation,vedette/sm) soit vrai.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Ah oui c'est vrai, j'avais choisi un tout petit échantillon désolée !

    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
    <DICTIONNAIRE departement="Ain" dep="01">
     
     
        <article id="1" pg="1">
            <vedette><pg>1</pg><sm>Abbatiale (L'),</sm></vedette>
            <definition><typologie>ferme</typologie>, <localisation>commune de Crans</localisation>.</definition>
        </article>
     
        <article id="2" pg="1">
            <vedette><sm>Abbatoir (L'),</sm></vedette>
            <definition><typologie>écart</typologie>, <localisation>commune de Loyettes</localisation>.</definition>
        </article>
     
       <article id="3586" pg="138">
            <vedette><sm>Crans,</sm></vedette>
            <definition><typologie>commune</typologie> du <localisation>canton de Chalamont</localisation>.</definition>
            <forme_ancienne>- <i>Crans,</i> <date>1433</date> <reference>(arch. de l'Ain, H*141)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Crant,</i> <date>1587</date> <reference>(pouillé de Lyon, f°*11*v°)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Cran,</i> <date>1699</date> <reference>(Bibl. Dumb., t.*I, p.*654)</reference>.</forme_ancienne>
            <commentaire><p>En <date>1789</date>, Crans était une communauté située partie en Bresse et partie en Dombes*; la partie de Bresse dépendait du bailliage, élection et subdélégation de Bourg, mandement de Loyes*; la partie située en Dombes ressortissait à la sénéchaussée de Trévoux.</p>
                <p>L'église paroissiale, diocèse de Lyon, archiprêtré de Chalamont, était sous le vocable de <pg>139</pg>l'Assomption*; l'abbé d'Ambronay présentait à la cure.</p></commentaire>
            <forme_ancienne>- <i>Ecclesia de Crant*; diruta,</i> <date>1259 environ</date> <reference>(pouillé de Lyon, f°*11*r°)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Crans. Église parrochiale*: Nostre Dame,</i> <date>1613</date> <reference>(visites pastorales, f°*81*v°)</reference>.</forme_ancienne>
            <commentaire><p>- C'est dans cette paroisse que les sires de Villars avaient fondé l'abbaye de la Chassagne.</p>
                <p>La partie située en Bresse, et notamment le clocher, était du fief des seigneurs de Châtillon-la-Palud*; en <date>1723</date>, le duc du Maine, souverain de Dombes, céda la justice haute, moyenne et basse de la partie située en Dombes aux seigneurs de Châtillon qui la rétrocédèrent aux religieux de la Chassagne.</p>
                <p>A l'<date>époque intermédiaire</date>, Crans était une municipalité du canton de Chalamont, district de Montluel.</p></commentaire>
        </article>
     
        <article id="6138" pg="233">
            <vedette><sm>Loyettes,</sm></vedette>
            <definition><typologie>commune</typologie> du <localisation>canton de Lagnieu</localisation>.</definition>
            <forme_ancienne>- <i>Loietes,</i> <date>1222</date> <reference>(Cart. lyonnais, t.*I, n°*187)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loetes,</i> <date>1230</date> <reference>(Cart. lyonnais, t.*I, n°*263)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loyetes,</i> <date>1339</date> <reference>(arch. de l'Ain, H*222)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loyetas,</i> <date>1475</date> <reference>(Brossard, Cartul. de Bourg, p.*475)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loyettes,</i> <date>1492</date> <reference>(Guichenon, Savoie, pr., p.*443)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>La communauté de Loyettes,</i> <date>1536</date> <reference>(Guichenon, Bresse et Bugey, pr., p.*60)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loyettez,</i> <date>1655</date> <reference>(visites pastorales, f°*45)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Loyette,</i> <date>1789</date> <reference>(Pouillé de Lyon, p.*15)</reference>.</forme_ancienne>
            <commentaire><p>Avant la Révolution, Loyettes était un bourg du pays de Bugey, bailliage, élection et subdélégation de Belley, mandement de Saint-Serlin.</p>
                <p>Son église paroissiale, diocèse de Lyon, archiprêtré d'Ambronay, était sous le vocable des saints Jacques et Christophe. L'abbé d'Ambronay présentait à la cure. Les religieux de cette abbaye avaient fondé un prieuré à Loyettes.</p></commentaire>
            <forme_ancienne>- <i>Loyettes</i> (<i>prior.</i>), <date>1250 environ</date> <reference>(pouillé du dioc. de Lyon, f°*15*v°)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Prior de Loyetes,</i> <date>1325 environ</date> <reference>(pouillé du dioc. de Lyon, f°*1)</reference>.</forme_ancienne>
            <forme_ancienne>- <i>Ecclesia de Loyetes,</i> <date>1350 environ</date> <reference>(pouillé du dioc. de Lyon, f°*13*r°)</reference>.</forme_ancienne>
            <commentaire><p>En tant que fief, Loyettes dépendait originairement du domaine de l'abbaye d'Ambronay, qui l'inféoda, en toute justice, <date>vers 1200</date>, à la famille d'Anthon*; cette terre fit retour, <date>vers 1350</date>, aux abbés d'Ambronay, qui la cédèrent, en <date>1371</date>, à Amédée*VI, comte de Savoie. De <date>1579</date> à <date>1738</date>, la seigneurie de Loyettes, érigée en baronnie, fut unie au marquisat de Miribel*; elle avait comme dépendance la paroisse de Saint-Vulbas.</p></commentaire>
            <forme_ancienne>- <i>Le chasteau et villaige de Loyetes,</i> <date>1563</date> <reference>(arch. de la Côte-d'Or, B*10453, f°*180*r°)</reference>.</forme_ancienne>
            <commentaire><p>A l'<date>époque intermédiaire</date>, Loyettes était une municipalité du canton de Lagnieu, district de Saint-Rambert.</p></commentaire>
        </article>
     
    </DICTIONNAIRE>
    Par exemple ici, il faudrait que l'article 1 "Abbatiale (L')" ait un attribut @ref renvoyant vers l'article 3586 de la commune de Crans, puisque l'élément <localisation> indique que cette ferme s'y trouve. Pareil pour l'article 2 "Abbatoir (L')", qui doit renvoyer vers l'article 6138 de la commune de Loyettes.

  12. #12
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Je n'ai toujours pas réussi à résoudre mon problème...
    Auriez-vous une idée avec l'exemple que je vous ai donné ?
    Merci beaucoup !

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je ne pense pas que ce soit possible, il faudrait un meilleur XML.

    Là tu n'as pas "Crans" et "Crans" mais tu as "commune de Crans" et "Crans,"

    Il y en a un qui commence par "commune de" et l'autre qui finit par une virgule. Ça ne va pas, c'est trop approximatif. Un ordinateur c'est carré, il faut que les choses soient exactes sinon ça ne colle pas. Passe encore pour la virgule ou des trucs entre parenthèses, mais comment tu veux enlever "commune de" ?

    Là tu as fait exprès de choisir deux exemples idéaux avec lesquels ça marche à peu près, "Ben oui c'est une commune qui s'appelle Crans et on le voit avec avec <sm>Crans,</em> donc quand quelque chose a le mot Crans dans sa <localisation> c'est qu'il est dans cette commune !"

    Et ça pourrait se faire assez simplement comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- trouve-moi un article, dont la vedette/sm dont j'enlève la virgule, est contenue dans ma definition/localisation. -->
    <xsl:variable name="commune" select="//article[contains(current()/definition/localisation, translate(vedette/sm, ',', ''))]" />
     
    <!-- si on a trouvé un tel article -->
    <xsl:if test="$commune">
      <!-- ajouter un attribut ref -->
      <xsl:attribute name="ref">
        <!-- dont la valeur est l'id de cet article trouvé -->
        <xsl:value-of select="$commune/@id"/>
      </xsl:attribute>
    </xsl:if>
    Très bien. Ça marche pour tes deux exemples. Mais est-ce que ça va marcher dans tous les cas ? Bien sûr que non ! Il faut que les noms qui pointent de l'un vers l'autre soient exactement délimités ! Un ordinateur ça ne parle pas français.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre à l'essai
    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
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre aide !
    Malheureusement on m'a fourni les fichiers comme ça !
    Je vais voir comment je peux adapter ce code !
    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/11/2015, 13h14
  2. [XL-2013] Récupérer des données issues d'un fichier XML en ligne
    Par pierrotjj dans le forum Excel
    Réponses: 4
    Dernier message: 08/09/2015, 11h13
  3. Réponses: 1
    Dernier message: 30/07/2009, 15h32
  4. regénération d'un fichier xml et insertion des donnés
    Par totomimi dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 24/06/2009, 18h42
  5. Fichier XML et insertion de données
    Par will2taz dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/09/2007, 10h35

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