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 :

Modifier la valeur d'un attribut @id en y ajoutant du texte et la valeur d'un autre attribut [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 Modifier la valeur d'un attribut @id en y ajoutant du texte et la valeur d'un autre attribut
    Bonjour à tous,

    Je cherche à modifier un fichier XML (et en créer un nouveau en output) dont les attributs @id des éléments <article> n'ont pas le bon format. (il s'agit d'un dictionnaire divisé en plusieurs articles)
    En effet, chaque article a un @id. Ces id sont numérotés de 1 jusqu'à la fin. Or, je souhaiterais que chaque numéro soit précédé de "DT05_", le "05" correspondant à la valeur de l'attribut @dep de l'élément <DICTIONNAIRE>.
    En résumé, l'id de l'article 1 serait "DT05_1", celui de l'article 2 "DT05_2", etc.
    Étant donné que je débute en XSLT, malgré mes tentatives, je n'ai trouvé de solution pour le moment...

    Voici un extrait de mon fichier XML :

    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"?>
     
    <DICTIONNAIRE departement="Hautes-Alpes" dep="05">
     
        <article id="1" pg="1">
            <vedette><pg>1</pg><sm>Abadons (Les),</sm></vedette>
            <definition><typologie>ferme</typologie>, <localisation>commune de Gap</localisation>.</definition>
            <forme_ancienne><i>Abadoux</i> <reference>(lang. vulg.)</reference>.</forme_ancienne>
            <forme_ancienne><i>Abadon</i> <reference>(État-maj.)</reference>.</forme_ancienne>
        </article>
     
        <article id="2" pg="1">
            <vedette><sm>Abbaye (L'),</sm></vedette>
            <definition><typologie>ruines</typologie>, <localisation>commune de Clausonne</localisation>.</definition>
            <commentaire><p>— Ancienne abbaye d'hommes. On ignore l'époque de sa fondation ; elle devint un simple bénéfice à partir de la <date>fin du <sm>xvi</sm><sup>e</sup> siècle</date>.</p></commentaire>
            <forme_ancienne><i>Monasterium de Clausonna,</i> <date>1386</date> <reference>(H.-A. Durb.)</reference>.</forme_ancienne>
            <forme_ancienne><i>Monasterium Clausone,</i> <date>1409</date> <reference>(H.-A. chap.)</reference>.</forme_ancienne>
            <forme_ancienne><i>Abbatia de Clausono,</i> <date>1500</date> <reference>(H. A. pouillé de Gap)</reference>.</forme_ancienne>
        </article>
     
        <article id="3" pg="1">
            <vedette><sm>Abbé (L'),</sm></vedette>
            <definition><typologie>ferme</typologie>, <localisation>commune de Champcella</localisation>.</definition>
        </article>
     
    </DICTIONNAIRE>

    Et voici mon code XSLT :


    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="2.0">
     
        <xsl:output 
            method="xml" 
            indent="yes"/>
     
    <xsl:template match="node() | @*">
            <xsl:copy>
                <xsl:apply-templates select="node() | @*"/>
            </xsl:copy>
    </xsl:template>
     
        <xsl:template match="DICTIONNAIRE">
            <xsl:for-each select="article[@id]">
                <xsl:value-of select="concat('DT',DICTIONNAIRE[@dep],'_',article[@id])"/>
            </xsl:for-each>
            <xsl:apply-templates/>
        </xsl:template>
     
    </xsl:stylesheet>
    Merci par avance pour l'aide que vous pourrez m'apporter !

  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,

    Je constate que tu as repéré qu'il faut commencer par un template qui recopie tout le document tel que.

    Par contre le principe après, c'est d'ajouter un template qui modifie uniquement ce qui a besoin d'être modifié.
    Il me semble que ce qu'il faut modifier et pas garder tel que, ce n'est pas l'élément <DICTIONNAIRE>. Il me semble que ce serait plutôt l'attribut id de l'élément <article>.

    Alors que faut-il mettre dans le match pour ne chercher à modifier que les attributs id des éléments <article> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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
    @Kamkamy
    Voici comment faire, une de façons parmi d'autres, si vous n'avez pas tout compris, remplaçant totalement le template qui matche DICTIONNAIRE.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="@id[parent::article and ancestor::DICTIONNAIRE]">
        <xsl:attribute name="id">
            <xsl:value-of select="concat('DT',ancestor::DICTIONNAIRE/@dep,'_',.)"/>
        </xsl:attribute>
    </xsl:template>

  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
    Merci beaucoup pour votre aide !!!!!
    Bonne soirée !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/07/2017, 10h57
  2. Réponses: 3
    Dernier message: 23/01/2017, 10h26
  3. Réponses: 4
    Dernier message: 14/12/2007, 16h15
  4. Réponses: 1
    Dernier message: 02/04/2007, 12h37
  5. [XSLT]problème d'appel de texte dans une balise à partir d'un attribut
    Par docteur chépère dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/01/2007, 10h57

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