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 :

[xsl] Problème avec for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut [xsl] Problème avec for-each
    Bonjour,

    J'ai un problème de merde qui me prend la tête depuis ce matin, donc je me décide à demander de l'aide ^^
    Voilà, j'ai un fichier xml comme celui-ci :

    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
    <CHAR_ELEM>
       <c:CHAR_MECA_DEF-GRP>
          <c:CHAR_MECA_DEF>
             <NUM>1</NUM>
             <NOM>Poids propre</NOM>
             <c:SOLLICITATION-GRP>
                <c:SOLLICITATION>
                   <c:NUM_MECA>10</c:NUM_MECA>
                   <c:COEF_MULT_FIXE>0.42E+04</c:COEF_MULT_FIXE>
                </c:SOLLICITATION>
                <c:SOLLICITATION>
                   <c:NUM_MECA>11</c:NUM_MECA>
                   <c:COEF_MULT_FIXE>-0.96E+04</c:COEF_MULT_FIXE>
                </c:SOLLICITATION>
             </c:SOLLICITATION-GRP>
          </c:CHAR_MECA_DEF>
       </c:CHAR_MECA_DEF-GRP>
    </CHAR_ELEM>
    Ce que je cherche à faire, c'est en faire un tableau. A première vue, c'est pas très compliqué. Le seul truc, c'est que pour les SOLLICITATION, je souhaite avoir dans une premiere colonne, le NUM_MECA de toutes ces SOLLICITATION séparées par un espace, et dans la 2e colonne, les COEF_MULT_FIXE séparé par des espaces égalements.

    Pour cela, j'ai fait un fichier xsl comme celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="/*" >
          <xsl:variable name="solli_tmp" select="' '"></xsl:variable>
          <xsl:for-each select="/CHAR_ELEM_CL/t:CHAR_ELEM-GRP/t:CHAR_ELEM">
             <xsl:variable name="solli_tmp"   select="concat($solli_tmp,'a')" />
          </xsl:for-each>
          <tr>
             <td><xsl:value-of select="$solli_tmp"/></td>
          </tr>
    </xsl:template>
    Dans mon exemple, je fais un concat() avec 'a' déjà, rien que pour voir s'il rentre dans la boucle for-each. Et j'ai l'impression qu'il ne va jamais dedans... Alors je sais pas ce qu'il faut faire comme test, mais je vois pas, j'ai essayé plein de trucs différents, il rentre jamais dedans.

    Si quelqu'un a une idée (de génie?), je suis ouvert à toutes les propositions

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    oups, vous l'aurez compris, j'ai pas copier/coller le bon for-each ^^ Celui-ci c'était un de mes inombrables test. Un plus logique, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       <xsl:for-each select="/CHAR_ELEM/c:CHAR_MECA_DEF-GRP/c:CHAR_MECA_DEF">
          <xsl:variable name="solli_tmp"   select="concat($solli_tmp,'a')" />
       </xsl:for-each>

  3. #3
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    pas clair

    donne un exemple du rendu de ton resultat (html ?)

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    lol, je pensais que ça l'était :p
    Mais je peux pas te montrer le rendu, vu que je l'affiche sous Java :s

    Bon, en gros un dessin :p



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Num   |   Nom              | Num_Meca   |   Coef             
    ------------------------------------------------------------------------
         1   |    Poids propre    |  10 11     | 0.42E+04 -0.96E+04  
    ------------------------------------------------------------------------
    Ca, c'est le tableau que je voudrais obtenir avec le fichier xml que je met en exemple. Alors pour les 2 premières colonnes, y a pas de pb, mais apr contre, pour els 2 dernières, j'ai besoin de faire un for-each (enfin je suppose) pour mettre les données de la balise SOLLICITATION-GRP "bout à bout". J'espère que c'est plus clair :s

    En gros, faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="CHAR_ELEM/c:CHAR_MECA_DEF-GRP/c:CHAR_MECA_DEF/c:SOLLICITATION-GRP/c:SOLLICITATION">
    qui me récupère les SOLLICITATION, et apres, je met chaque NUM_MECA dans une variable pour afficher ensuite cette variable qui contiendra donc tout mes NUM_MECA mis bout à bout (ici 10 et 11).

    Le problème, c'est que ça marche pas

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Mouais, bon alors en fait, j'suis limite VnR d'avoir perdu autant de temps là-dessus, mais voilà la solution à mon pb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="c:SOLLICITATION-GRP/c:SOLLICITATION">
       <xsl:apply-templates select="c:NUM_MECA"/>
       <xsl:value-of select="' '"/>
    </xsl:for-each>
    J'ai l'impression qu'en fait, il est impossible de mettre un <xsl:variable> dans un <xsl:for-each>. Enfin, depuis que je fais sans, ça marche, donc je suppose que c'est la clé du problème. Peut-être qu'il considère que c'était une redéclaration de variable, et donc ce n'est pas autorisé.

    Enfin toujours est-il que mon problème est résolu (merci pour votre aide précieuse !!!! non, non, ce n'est pas ironique )

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

Discussions similaires

  1. [XSLT] problème avec for-each
    Par aziziti dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/06/2007, 10h23
  2. [XML/XSL]problème avec for-each
    Par mavina dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/06/2006, 15h28
  3. [XSLT]problème avec for-each incompréhensible
    Par trotters213 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/02/2006, 10h31
  4. [XML][XSLT] Débutant {Probléme avec For-each-group}
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/01/2006, 21h38
  5. [VB.NET] Problème avec For Each...
    Par cyrcroix dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/06/2005, 10h49

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