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:for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut xsl:for-each
    Bonjour à tous,

    Je débute en XSLT, et je n'arrive pas à faire fonctionner une boucle for-each...(rigolez pas..)

    voici un la structure de mon xml :

    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
      <RendezVous> 
        <IDRDV>13</IDRDV> 
        <IDTYPERDV>11</IDTYPERDV> 
        <DATES>2006-01-04T00:00:00.0000000+01:00</DATES> 
        <TYPERDV>Congés</TYPERDV> 
      </RendezVous> 
      <Frais> 
        <IDLIGNENOTEDEFRAIS>17</IDLIGNENOTEDEFRAIS> 
        <NBUNIT>778</NBUNIT> 
        <MONTANT>583.5</MONTANT> 
        <DATES>2005-12-06T00:00:00.0000000+01:00</DATES> 
        <LIBELLE>Déplacement en véhicule</LIBELLE> 
        <UNITE>KM</UNITE> 
        <IDRDV>13</IDRDV> 
        <VALEURUNITAIRE>0.75</VALEURUNITAIRE> 
      </Frais>

    Sachant qu'il peux y avoir plusieur Frais associé à un rendez-vous.

    Le but est d'afficher un détail des frais de chaques Rendez-vous.

    Voici ma template :

    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
       <xsl:template name="FRAIS"> 
       <xsl:param name="IDRDV_FRAIS" /> 
          <div class="rupture_1">Détails des frais</div> 
          <table border="1"> 
             <tr> 
                <td>Libellé</td> 
                <td>Coût unitaire</td> 
                <td>Quantité</td> 
                <td>Montant</td> 
                <td>Date</td> 
             </tr> 
             <xsl:for-each select="Frais[IDRDV=$IDRDV_FRAIS]">    
                  <tr> 
                   <td><xsl:value-of select="LIBELLE" /></td> 
                   <td><xsl:value-of select="VALEURUNITAIRE" /> <xsl:value-of select="UNITE" /></td> 
                   <td><xsl:value-of select="NBUNIT" /></td> 
                   <td><xsl:value-of select="MONTANT" /></td> 
                   <td><xsl:value-of select="DATES" /></td> 
                  </tr> 
             </xsl:for-each> 
          </table> 
       </xsl:template>
    Cette derniere que j'appelle dans la template Rendez-vous avec comme paramêtre l'IDRDV correspondant.

    J'ai beau avoir pas mal cherché, je penses avoir utilisé la bonne méthode.. Mais ce ne marche pas... On ne rentre pas dans le for-each.

    Merci d'avance à ceux qui tenteront de m'apporter une torche dans ces couloirs sombres...

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    ca ma fait sourire seulement!

    D'après ce que tu dit tu trouve dans le template frais et ca n'applique pas le boucle du for-each? C'est bien ca?

    Tu peux considérer un noeud xml comme un dossier si tu es dans frais tu ne peux pas y rentrer une deuxième fois on est d'accord?

    ce qu'il faut faire c'est mettre un . ou node() au lieu de Frais (ca symbolise le noeud courant pareil si tu fait dans un value-of)dans ton for-each et tu verras ca marchera

    ++

    Thierry

  3. #3
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    Merci de ton aide,

    E fait je suis dans le template "RendezVous", et si j'ai bien compris, je dois remonté une arborescence.

    J'ai éssayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select=".Frais[@IDRDV=$IDRDV_FRAIS]">
    la j'ai une belle erreur :
    ERROR: Description: Expected token 'EOF' found 'NAME'.

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="./Frais[@IDRDV=$IDRDV_FRAIS]">
    ce ne marche pas...

    et j'ai tenté la même chose avec node()... Mais ca ne marche toujours pas...

  4. #4
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    tu y étais presque!!

    c'est ../Frais[ta condition]

    ++

    Thierry

  5. #5
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    MERCI !!!

    Pfou... tant de piétinement pour 2 points et un slash... c'est pas drôle des fois...

    Encore merci à toi

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Un peu en marge du thread, n'y-a-t-il pas une recommandation pour mettre les tags XML en minuscule?
    Je pense même que c'est une exigence en XHTML.

  7. #7
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Non pas du tout il faut éviter les éà & # les autres dans les nom de balises! ne pas commencer le nom d'un attribut par un chiffre et après tu peux laisser lirs court a ton imagination!

    Sinon comme XML est case sensitive toto ne sera pas égal à Toto!

    Tu peux donc utiliser le même méthode pour tes nom de balise que quand tu code en C# par ex!

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

Discussions similaires

  1. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  2. boucle <xsl:for-each>
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 13/02/2006, 11h58
  3. [XSL] for-each et variable
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/01/2006, 11h42
  4. [XSL] for-each + sort, et comparaison current previous value
    Par johan_barbier dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2005, 16h46
  5. [XML/XSL] for-each imbriqués
    Par grome dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/11/2005, 12h44

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