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 :

Insérer une balise XML à un endroit précis d'une chaîne de caractères avec XSLT [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 Insérer une balise XML à un endroit précis d'une chaîne de caractères avec XSLT
    Bonjour à tous,

    Je cherche à ajouter une balise à l'intérieur d'un élément, à un endroit précis d'une chaîne de caractères.

    Voici 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
     
    <DICTIONNAIRE>
     
    <article id="DT05-00005" pg="1">
          <vedette>
             <sm>Abeil (L'),</sm>
          </vedette>
          <definition>
             <typologie>bois</typologie>, <localisation>commune de Saint-Michel-de-Chaillol</localisation>.</definition>
      </article>
     
      <article id="DT05-00006" pg="1">
          <vedette>
             <sm>Abeilles (Les),</sm>
          </vedette>
          <definition>
             <typologie>écart</typologie>, <localisation>commune d'Aiguilles</localisation>.</definition>
      </article>
     
    </DICTIONNAIRE>
    Dans <localisation>, je voudrais ajouter une balise <commune> autour du nom de la commune (ici donc, Saint-Michel-de-Chaillol et Aiguilles par exemple).

    Voici l'XSLT 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?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="definition/localisation[1]">
     
            <xsl:copy>
     
                <xsl:apply-templates select="node() | @*"/>
     
                <xsl:choose>
     
                    <xsl:when test="contains(., 'commune de')">
                        <xsl:element name="commune" >
                            <xsl:attribute name="precision">
                                <xsl:text>certain</xsl:text>
                            </xsl:attribute>
                            <xsl:value-of select="substring-after(., 'commune de ')"/>
                        </xsl:element>
                    </xsl:when>
     
                    <xsl:when test="contains(., 'commune d''')">
                        <xsl:element name="commune">
                            <xsl:attribute name="precision">
                                <xsl:text>certain</xsl:text>
                            </xsl:attribute>
                            <xsl:value-of select="substring-after(., 'commune d''')"/>
                        </xsl:element>
                    </xsl:when>
     
                </xsl:choose>
     
            </xsl:copy>
        </xsl:template>    
    </xsl:stylesheet>
    Et j'obtiens ce résultat :

    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
     
    <DICTIONNAIRE>
     
      <article id="DT05-00005" pg="1">
          <vedette>
             <sm>Abeil (L'),</sm>
          </vedette>
          <definition>
             <typologie>bois</typologie>, <localisation>commune de Saint-Michel-de-Chaillol<commune precision="certain">Saint-Michel-de-Chaillol</commune>
             </localisation>.</definition>
      </article>
     
      <article id="DT05-00006" pg="1">
          <vedette>
             <sm>Abeilles (Les),</sm>
          </vedette>
          <definition>
             <typologie>écart</typologie>, <localisation>commune d'Aiguilles<commune precision="certain">Aiguilles</commune>
             </localisation>.</definition>
      </article>
     
    </DICTIONNAIRE>
    Si j'ai bien le nom de la commune dans la balise, il est en fait répété alors que je souhaiterais baliser le texte déjà présent dans mon élément <localisation>.

    Comment puis-je faire ?

    Merci d'avance pour votre aide !

  2. #2
    Modérateur

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

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

    en remarque préliminaire, je ne comprends pas l'intérêt de faire cela d'une manière automatisée, ajouter des balises à un document XML déjà existant :

    - si l'information à structurer en XML peut être décidée automatiquement, alors pourquoi ce n'est pas le consommateur qui le fait ?
    - si elle ne peut pas vraiment être décidée automatiquement, alors à quoi ça rime d'essayer ?

    Bon, sinon,

    tu es dans un cas compliqué.

    Là il n'est pas possible de faire <xsl:copy> de ton texte.

    Il te faudrait une nouvelle règle qui gère ce cas, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="definition/localisation[1]/text()[contains(., 'commune de ')]">
    Et à l'intérieur, tu ne dois copier que "commune de ", puis créer ton élément <commune> dans lequel tu mets comme texte ce qui suit "commune de ".
    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
    C'est parfait ça marche merci beaucoup !!
    J'ai besoin de faire cela pour rajouter des informations supplémentaires dans mon fichier

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ravi que ça te plaise.

    Citation Envoyé par Kamkamy Voir le message
    J'ai besoin de faire cela pour rajouter des informations supplémentaires dans mon fichier
    Sauf que toutes les informations proviennent du même fichier, donc tu n'en ajoutes pas au final.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/11/2016, 11h34
  2. Modfier le value d'une balise param et le data d'une balise object
    Par aljessy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/05/2014, 16h25
  3. [xsl] mauvaise interprétation du contenu d'une balise XML
    Par Cédric B. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/01/2006, 13h59
  4. Afficher une fenetre a un endroit préci de l'ecran
    Par leo5593 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 09/08/2005, 15h58
  5. [JDOM] données un attribut à une balise xml
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 09/07/2004, 16h54

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