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 :

Transformation XSLT pour générer du XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Transformation XSLT pour générer du XML
    Bonjour,

    Je voudrais utiliser une XSLT pour transformer du XML en XML.

    Mon fichier XML avant transformation est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <A>
       <B>
          <C>texte1</C>
          <D>code</D>
       </B>
       <E>
          <F>code</F><!-- code est identique pour l'élément D et F -->
          <G>texte2</G>
          <H>texte3</H>
       </E>
    </A>
    Le fichier XML que je voudrai en sortie est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <A>
       <B>
          <C>texte1</C>
          <D>code</D>
          <I>
             <F>code</F>
             <G>texte2</G>
             <H>texte3</H>
          </I>
       </B>
    </A>
    Pouvez-vous m'aider à générer cette XSL car je ne vois pas comment la faire ?

    Merci d'avance,
    Kalbo.

  2. #2
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je vois toujours pas comment je peux faire.
    Mon problème c'est que mon élément E n'est pas dans mon élément contexte.

    J'ai aussi oublier de préciser que dans mon xml j'ai n élément B et E.

    Je suis perdu, si tu peux m'aiguiller?

    Merci.
    Kalbo

  4. #4
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    fais voir ton code XSL

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voici ma XSL :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" encoding="ISO-8859-1" />
        <xsl:template match="/">
    		<A>
    			<xsl:apply-templates select="B" />
    		</A>
        </xsl:template>
     
        <xsl:template match="B">
    		<B>
    			<C><xsl:value-of select="C" /></C>
    			<xsl:if test="D = //E/F" >
    				<xsl:apply-templates select="E" />
    			</xsl:if>
    		</B>
        </xsl:template>
     
        <xsl:template match="E">
    		<I>
    			<F><xsl:value-of select="F" /></F>
    			<G><xsl:value-of select="G" /></G>
    			<H><xsl:value-of select="H" /></H>
    		</I>
        </xsl:template>
    </xsl:stylesheet>
    Le souci ici est que dans mon noeud contexte ici B il n' y a pas de E donc il ne le trouve pas.

    Ce que je voudrais c'est pouvoir récupérer les valeurs de mon élément E que je concatène dans mon élément B et ensuite je voudrais revenir dans mon nœud contexte B.

    Merci pour ton aide,
    Kalbo.

  6. #6
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    si a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates select="E" />
    parce que la tu lui dit de faire le template select=E

    donc tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates/>
    il traitera les fils avec les templates possibles ( ceux que tu as créer ) ... donc si y as rien il fera rien, si il voit un E il fera le template select=E ...............

    ok ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je suis d'accord avec toi sur le fait que s'il voit une E il le fera. Mais dans mon XML je n'aurai jamais un E dans un nœud B.

    Mes nœuds E seront toujours au même niveau que les nœuds B.

    Voir xml ci-joint :
    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
     
    <A>
       <B>
          <C>texte1</C>
          <D>code1</D>
       </B>
       <B>
          <C>texte4</C>
          <D>code2</D>
       </B>
       <E>
          <F>code1</F><!-- code1 est identique pour l'élément D et F -->
          <G>texte2</G>
          <H>texte3</H>
       </E>
       <E>
          <F>code2</F><!-- code2 est identique pour l'élément D et F -->
          <G>texte5</G>
          <H>texte6</H>
       </E>
    </A>
    Merci,
    Kalbo.

  8. #8
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    ok
    je vois ce que tu veux faire
    est ce que cela pourrais t aider ?? je pense que c'est exactement ce que tu veux faire

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé une autre solution.

    Je sauvegarde mon noeud contexte dans une variable et après je fais mon apply-templates en fonction de mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="path" select="./D"/>
    <xsl:apply-templates select="//E[D=$path]"/>

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

Discussions similaires

  1. [XSLT] pour plusieurs fichiers XML
    Par SkyBack dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/10/2009, 14h02
  2. Souci d'encodage pour générer des XML
    Par oneTime dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2008, 12h32
  3. BDD Excel pour générer un XML
    Par Goffer dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 17/06/2008, 13h33
  4. script pour générer un xml à partir bdd mysql
    Par majong dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 06/06/2008, 11h13
  5. [XML - XSLT] Plusieurs xslt pour un fichier xml
    Par Laure888 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 17/03/2006, 15h16

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