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 :

[XSLT]encore une boucle tordu


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 77
    Points
    77
    Par défaut [XSLT]encore une boucle tordu
    bonjour à tous ...

    donc voila mon problème ... j'ai un xml comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!-- actuel -->
    <vlist>
    <value>1</value> <label> Yes </label>
    <value>0</value> <label> No </label>
    </vlist>
    et je voudrais le transphormer en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- but à atteindre -->
    <vlist>
    <velem>
    <value>1</value> <label> Yes </label>
    </velem>
    <velem>
    <value>0</value> <label> No </label>
    </velem>
    </vlist>
    donc je me suis dit : "bah tu rentre dans <vlist> , tu ouvre un <velem> tu ecrit 2 elements et tu ecrit </velem><velem>, puis quand tu arrive à la fin tu ecrit le </velem> puis le </vlist> "

    donc j'ai commencer à coder mon xsl et j'en suis à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:element name="vlist">
    	<xsl:for-each select="./attributes/vlist/*" > 
    		<xsl:element name="velem">
    			<xsl:element name="value"><xsl:value-of select="value"  /></xsl:element>	
    			<xsl:element name="label"><xsl:value-of select="label"  /></xsl:element>
    		</xsl:element><!--fin velem-->
    	</xsl:for-each>
    </xsl:element>
    mon problème c'est que il me resoirt rien .. a part : <vlisr><velem />/vlist>

  2. #2
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Ton XML est de la forme suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <vlist>
         <label>label1</label>
         <value>value1</value>
         <label>label2</label>
         <value>value2</value>
         ...
    </vlist>
    Si tu n'auras qu'UN ET UN SEUL <value> derrière chaque label, tu peux faire comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="/">
         <xsl:apply-templates select="//vlist/label"/>
    </xsl:templates>
    <xsl:template match="label">
         <velem>
              <label><xsl:value-of select="."/></label>
              <value><xsl:value-of select="following-sibling::value[1]"/></value>
         </velem>
    </xsl:template>
    Je pense que tu devrais obtenir un truc satisfaisant
    See you, space cowboy... and if you're satisfied, click on

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 77
    Points
    77
    Par défaut
    la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         <velem>
              <label><xsl:value-of select="."/></label>
              <value><xsl:value-of select="following-sibling::value[1]"/></value>
         </velem>
    marche sans problème, le truc c'est que c'est dans une boucle ...

    en gros ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:for-each select="./prog">
    ...
    ...
    <xsl:for-each select="./attributes/vlist/*" > 
    	<xsl:element name="velem">
    		<xsl:element name="value"><xsl:value-of select="."  /></xsl:element>
    		<xsl:element name="label"><xsl:value-of select="following-sibling::value[1]"/></xsl:element>
    		</xsl:element><!--fin velem-->
    </xsl:for-each>
    ...
    ...
    </xsl:for-each>
    et le problème c'est qu'il me crée 4 serie de label-value alors que j'en ai que deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         <label>label1</label>
         <value>value1</value>
         <label>label2</label>
         <value>value2</value>
    devient
    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
     
    <velem>
    <label>label1</label>
    <value>value1</value>
    </velem>
    <velem>
    <label>value1</label>
    <value>label2</value>
    </velem>
    <velem>
    <label>label2</label>
    <value>value2</value>
    </velem>
    <velem>
    <label>value2</label>
    <value />
    </velem>

  4. #4
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    C'est normal, la façon dont j'avais présenté le XSL n'utilisait pas de boucle mais apply templates faisait tout de même du récursif.

    Si tu tiens à garder ta boucle, change le select de ton for-each en "./attributes/vlist/label" et le problème serta réglé.

    Bon courage.
    See you, space cowboy... and if you're satisfied, click on

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 77
    Points
    77
    Par défaut
    Super ça marche .. merci

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

Discussions similaires

  1. Encore une boucle qui ne marche pas
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2011, 09h16
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. [XSLT] dans une boucle : valeur noeud position précédente
    Par Yudala dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/03/2007, 09h56
  4. [XSLT] Réutiliser une variable définie dans une boucle
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/10/2006, 16h49
  5. [XSLT]créer une boucle
    Par fraoustin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/01/2005, 14h13

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