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 :

Problème de variable dans un foreach


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 Problème de variable dans un foreach
    Bonjour,

    Avant toute chose, voici mon code xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       <xsl:variable name="numMecaTemp" select="$c2/table[position()=$pos]/data/tr/td[1]"/>
       <NUM_MECA><xsl:value-of select="$numMecaTemp"/></NUM_MECA>
       <xsl:for-each select="$c2/table[position()=$pos]/data/tr">
          <xsl:if test="$numMecaTemp != td[1]">
             <xsl:variable name="numMecaTemp" select="td[1]"/>
             <NUM_MECA><xsl:value-of select="$numMecaTemp"/></NUM_MECA>
          </xsl:if>
          <COEF_MULT_VARIABLE>
             <INSTANT><xsl:value-of select="td[2]"/></INSTANT>
             <VALEUR><xsl:value-of select="td[3]"/></VALEUR>
          </COEF_MULT_VARIABLE>
       </xsl:for-each>
    Voilà. Le problème vient du fait que ça marche pas :p
    En fait, c'est comme si ma variable numMecaTemp ne se mettait pas à jour en faisant un <xsl:variable name="numMecaTemp" select="td[1]"/> dans le foreach. Par exemple, si sa valeur est de 10, elle sera a 10 quelque soit la valeur de td[1]. :/

    Si quelqu'un voit quoi faire :/ (le but, c'est de n'afficher td[1] que s'il est différent du td[1] de la précédente ligne du tableau)

  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
    Trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        <NUM_MECA><xsl:value-of select="$c2/table[position()=$pos]/data/tr/td[1]"/></NUM_MECA>
        <xsl:for-each select="$c2/table[position()=$pos]/data/tr">
            <xsl:if test="preceding-sibling::tr[1]/td[1]!= td[1]">
                <NUM_MECA><xsl:value-of select="td[1]"/></NUM_MECA>
            </xsl:if>
            <COEF_MULT_VARIABLE>
                <INSTANT><xsl:value-of select="td[2]"/></INSTANT>
                <VALEUR><xsl:value-of select="td[3]"/></VALEUR>
            </COEF_MULT_VARIABLE>
        </xsl:for-each>

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    tu pourrais utiliser et laisse tomber la taille du code, ainsi qu'aérer un peu ce dernier ? c'est très très difficile à lire là...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  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
    En fait, pas complètement :/
    Est-ce possible de forcer l'écriture d'une balise ?
    Enfin, je voudrais faire ça :


    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
     
    <SOLLICITATION>
       <NUM_MECA><xsl:value-of select="$c2/table[position()=$pos]/data/tr/td[1]"/></NUM_MECA>
       <xsl:for-each select="$c2/table[position()=$pos]/data/tr">
          <xsl:if test="preceding-sibling::tr[1]/td[1]!= td[1]">
             </SOLLICITATION>
             <SOLLICITATION>
             <NUM_MECA><xsl:value-of select="td[1]"/></NUM_MECA>
          </xsl:if>
          <COEF_MULT_VARIABLE>
             <INSTANT><xsl:value-of select="td[2]"/></INSTANT>
             <VALEUR><xsl:value-of select="td[3]"/></VALEUR>
          </COEF_MULT_VARIABLE>
       </xsl:for-each>
    </SOLLICITATION>

    C'est le même code que le précédent, mais je souhaiterais rajouter des balises SOLLICITATION pour regrouper chaque partie du tableau dont la premiere colonne est identique. Bien sur, ce que j'ai écri ne fonctionne pas, mais dans le principe, c'est ce que je souhaiterais faire :/


    P.S : Ouais, mais c'est parce que je suis un peu paumé par la nouvelle interface du forum, j'avais pas encore utilisé et je voyais pas où c'était pour els balises code ^^ Sans parler du fait que j'avais aéré avec des espaces mais ils n'ont pas été pris en compte lors de la validation :/

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Utilise plutôt une méthode de regroupement. La méthode la plus utilisée en XSLT est la méthode Muench (une recherche dans le forum sur ce mot devrait être fructueuse).
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    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
    C'est surement une très bonne idée. Je ne savais pas que des méthodes de regroupement existait. C'est un peu dommage vu que mes éléments sont déja groupés (enfin, disons qu'il y a des lignes de 10, puis des lignes de 11, puis des lignes de 12, c pas mélangé ^^), donc je pense que ça doit être une perte de temps cpu, sans compter que je peux avoir à traiter de gros documents dans des cas exceptionnels. D'un autre côté, vu que je sais pas comment faire autrement....

    Enfin toujours est-il que je en capte pas trop comment m'en servir de cette méthode Muench ^^

    J'ai bien trouvé ta méthode, mais je ne vois pas trop comment ça marche là :/ C'est bien ça qu'il faut utiliser ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:key name="id" match="Id" use="."/> 
     
      <resultat>
        <xsl:for-each select="//Id[generate-id(.)=generate-id(key('id', .)[1])]">
          <xsl:sort select="."/>
          <xsl:copy-of select="."/>
        </xsl:for-each>
      </resultat>

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

Discussions similaires

  1. problème de variable dans requetes mysql
    Par Nelmo dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2006, 23h30
  2. [MySQL] Problme de variables dans requete
    Par eown dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2006, 17h05
  3. Réponses: 8
    Dernier message: 23/03/2006, 19h30
  4. problème de variable dans formulaire
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 06h53
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

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