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 :

réorganisation de balises xml avec xslt [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 6
    Points
    6
    Par défaut réorganisation de balises xml avec xslt
    Bonjour,

    Je souhaite convertir le code XML suivant:

    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
     
     <data>
     ...
     <atom>
       <digit>0</digit>
       <digit>5</digit>
       <digit>8</digit>
     </atom>
     ...
     <atom>
       <letter>z</letter>
       <letter>v</letter>
       <letter>t</letter>
     </atom>
     ...
     </data>
    en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <data>
     ...
      <integer>058</integer>
     ...
      <identifiant>zvt</identifiant>
     ...
     </data>
    à l'aide de xslt :

    J'arrive soit à le produire mais le nombre de ligne integer est égale au nombre de chiffre, soit je n'ai pas les balises integer ou identifiant.

    NB: Je n'ai pas ma machine avec moi en ce moment c'est pourquoi je ne peux vous fournir ce que j'ai déjà fait.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 372
    Points
    2 372
    Par défaut
    Bonjour,

    et bien, pour ma part, je ferais preuve de patience

  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
    Vous pouvez faire un developpement avec ceci - j'ai gardé la balise atom pourque l'on voie mieux.
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:strip-space elements="*" />
    <xsl:key name="integer" match="digit" use="." />
    <xsl:key name="identifiant" match="letter" use="." />
    <xsl:template match="/">
        <xsl:apply-templates select="*" />
    </xsl:template>
    <xsl:template match="data">
        <xsl:copy>
            <xsl:apply-templates select="atom" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="atom">
        <xsl:copy>
            <xsl:if test="count(key('integer',digit)) != 0">
                <integer>
                    <xsl:apply-templates select="key('integer',digit)" />
                </integer>
            </xsl:if>
            <xsl:if test="count(key('identifiant',letter)) != 0">
                <identifiant>
                    <xsl:apply-templates select="key('identifiant',letter)" />
                </identifiant>
            </xsl:if>
        </xsl:copy>
    </xsl:template>
    </xsl:stylesheet>
    Il peut accepter et fonctionne raisonnablement bien pour ce genre plus général de documents.
    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
    <data>
        <atom>
            <digit>0</digit>
            <digit>5</digit>
            <digit>8</digit>
        </atom>
        <atom>
            <letter>z</letter>
            <letter>v</letter>
            <letter>t</letter>
        </atom>
        <atom>
            <letter>a</letter>
            <letter>b</letter>
            <digit>1</digit>
            <digit>2</digit>
            <letter>c</letter>
            <letter>d</letter>
            <digit>3</digit>
        </atom>
     </data>

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci pour votre aide.

    J'ai adapté l'exemple fourni par tsuji avec mes tentatives de résolution.
    Il me manquant le count(). comme suit :

    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
     
    <xsl:strip-space elements="*" />
     
    <xsl:template match="/">
        <xsl:apply-templates select="*" />
    </xsl:template>
     
    <xsl:template match="atom">
     
            <xsl:if test="count(digit) != 0">
                <integer>
                    <xsl:apply-templates select="digit" />
                </integer>
            </xsl:if>
     
            <xsl:if test="count(letter) != 0">
                <identifiant>
                    <xsl:apply-templates select="letter" />
                </identifiant>
            </xsl:if>
     
    </xsl:template>
     
    <xsl:template match="digit|letter">  
      <xsl:value-of select="."/>
    </xsl:template>
     
    </xsl:stylesheet>
    et cela fonctionne maintenant.

    Merci.

  5. #5
    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
    Bonjour, ce que vous mettez de plus qui peut paître comme un peu de détail est en effet à mon sens très bien fait. Dans mes cahiers de préparation, j'ai mis ceci pour l'effet pareille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        <xsl:apply-templates select="key('integer',digit)" mode="proc" />
        <!-- la même pour letter -->
    Et puis un template pour text() qualifié par le mode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="text()" mode="proc">
        <xsl:value-of select="." />
    </xsl:template>
    Comme ça, on arrive à bien isolation la fonctionalité sortie sans interférence des compétitions de matches. Je n'ai pas mis ça dans la réponse pour la laisser plus simple sans besoin d'explication. En tout cas, c'est très bien fait et vous pouvez considérer utiliser un attribut de "mode" aussi.

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

Discussions similaires

  1. [XSLT]Comment copier un document xml avec xslt.
    Par maa dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 07/05/2009, 14h02
  2. [XSLT] création d'un RSS : diffusion des liens xml avec xslt
    Par elhout dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/03/2007, 16h23
  3. comment associer les couleur a un document xml avec xslt
    Par moh_yougo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/01/2006, 16h08
  4. Modification de fichier XML avec XSLT
    Par osmoz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/07/2005, 11h04
  5. [XSLT][XSD>XML]transformer xsd en xml avec xslt
    Par émile-henri dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/06/2005, 15h06

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