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 <xsl:when>


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut [XSL]problème avec <xsl:when>
    Bonjour à tous et à toutes,

    voici mon problème, je déssre créer une page pour editer le profile d'un user, et je dispose de 2 select différents qui contienent le nom des différents profiles et le nom des différents départements de ma DB.

    Dans mon cas je voudrais afficher comme éléments "selected=yes" dans mes select le profile du user à éditer ainsi que son départment, afin qu'en plus de son login,nom et prénom il trouve aussi ces infos là comme affichées losqu'il veut editer son profile.
    Voici le code que j'ai dans mon editUser.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
    28
    29
    30
    31
    32
    33
     
    ...
       <xsl:variable name="dept">
       	<xsl:value-of select="col[4]">
       	</xsl:value-of>
       </xsl:variable>
    ...
          <td>Department</td> 
          <td> 
             <select name="Department"> 
                  <xsl:for-each select="following-sibling::row[generate-id(current()) = generate-id(preceding-sibling::header[3])]">
                    <xsl:choose>
                      <xsl:when test="position() = '$dept'">
                              <option selected="yes">                        
                                       <xsl:attribute name="value"> 
                                               <xsl:value-of select="position()"></xsl:value-of> 
                                          </xsl:attribute> 
                                          <xsl:value-of select="col"></xsl:value-of> 
                              </option>                   
                      </xsl:when>
                      <xsl:when test="position() != '$dept'"> 
                              <option>                        
                                       <xsl:attribute name="value"> 
                                               <xsl:value-of select="position()"></xsl:value-of> 
                                          </xsl:attribute> 
                                          <xsl:value-of select="col"></xsl:value-of> 
                              </option>
                      </xsl:when>
                    </xsl:choose>
              	</xsl:for-each> 
            </select> 
          </td> 
    ...
    Pour le moment avec ce code, il me retourne la liste normale des départements et n'en selectionne aucun par défaut !
    Peut etre que je ne peux pas utiliser ma condition comme sa?

    Merci a vous si vous savez me dire pourquoi mon test ne fonctionne pas.

  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,

    faut pas mettre de ' ' quand tu va chercher une variable ou un paramètre.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    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
    aussi au lieu de faire un 2ème xsl:when avec un test met un xsl:otherwise c'est comme un else en prog il prend tous ceux-la qui ne sont pas pris dans le when

    au faite question perf != (n'est pas égal) n'est pas très bon à utiliser mais des fois on est quand même presque obligé de l'utilisé!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  4. #4
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Ok merci a toi,

    j'ai mis ceci mnt mais il n'y a toujours pas le bon option qui est selcted="yes" !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:when test="position() = $dept ">
    Ceci par contre focntionne bien !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:when test="position() = '5' ">
    Là il me met en selcted="yes" l'option dont le name="5", ce qui est bon !

    Ce serait pas ma variable qui a un prob : , car le col[4] contient bien la valeur 5 mais il n'en prend pas compte dutout dirait on !

  5. #5
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Bon j'ai remarqué une erreur, c'est que ma variable n'était pas dans mon for-each, elle était donc vide, je l'y ai placé et ai testé son contenu, celui ci est bon a présent !

    Par contre un autre problème comme j'ai crée cette variable dans mon for-each
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       <xsl:for-each select="following-sibling::row[generate-id(current()) = generate-id(preceding-sibling::header[2])]">
       <xsl:variable name="dept" select="col[4]"></xsl:variable>
       <xsl:variable name="prof" select="col[5]"></xsl:variable> 
    ...
    </xsl:for-each>
    Je ne sais plus la récupérer dans mon second for-each !
    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
     
          <td>Department</td> 
          <td> 
             <select name="Department"> 
                  <xsl:for-each select="following-sibling::row[generate-id(current()) = generate-id(preceding-sibling::header[3])]">
                    <xsl:choose>
                      <xsl:when test="position() = $dept ">
                              <option selected="yes">                        
                                       <xsl:attribute name="value"> 
                                               <xsl:value-of select="position()"></xsl:value-of> 
                                          </xsl:attribute> 
                                          <xsl:value-of select="col"></xsl:value-of> 
                              </option>
                      </xsl:when>
                    <xsl:otherwise>                    
                              <option>                        
                                       <xsl:attribute name="value"> 
                                               <xsl:value-of select="position()"></xsl:value-of> 
                                          </xsl:attribute> 
                                          <xsl:value-of select="col"></xsl:value-of> 
                              </option>
                      </xsl:otherwise>
                    </xsl:choose>
              	</xsl:for-each> 
            </select> 
          </td>
    A ce moment là XML SPY me dis que la variable n'est pas définie ou dans la scope.

    Comment faire pour atteindre cette variable? merci a vous

  6. #6
    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
    ok tu n'estz pas obligéde la mettre dans le for-each mais on moins dans le même template (car ca ne devais pas être le cas)


    Pour ce qui est de la durée de vie de ta variable il n'est valable que dans le for-each et pas moyen de la récupérer comme en prog!


    Alors met la dehors de ton for-each ou mieux fait une variable globale comme ca pas de prob de durée de vie(étant donnée que c'est une valeur contenu dans ton XML)!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  7. #7
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Ok je comprends mais le problème c'est que mon fichier XML ressemble a sa :
    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
    28
    29
    30
    31
     
    <profileName> 
    <header> 
    <col name="PROFILE_NAME"/> 
    </header> 
    <row> 
    <col>Super Administrator</col> 
    </row> 
    ...
    <header> 
    <col name="LOGIN_ID"/> 
    <col name="FIRSTNAME"/> 
    <col name="LASTNAME"/> 
    <col name="DEPT_ID"/> 
    <col name="PROFILE_ID"/> 
    </header> 
    <row> 
    <col>Laurent.Dieu</col> 
    <col>Dieu</col> 
    <col>Laurent</col> 
    <col>5</col>  <-------Donnée que je veux récupérer !!!!!
    <col>8</col> 
    </row> 
    <header> 
    <col name="DEPT_NAME"/> 
    </header> 
    <row> 
    <col>Contact Center</col> 
    </row> 
    ...
    </profileName>
    Donc voilà, j'ai un XML un peu spécial d'ou mon problème ! Je ne sais pas comment attendre la valeur indiquée avec xpath
    j'ai testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="dept" select="profileName/header[2]/col[4]"></xsl:variable>
    <xsl:variable name="prof" select="profileName/header[2]/col[5]"></xsl:variable>
    Et même ceci en variable globale:


    Mais sa en variable globale mais sa ne fonctionne pas non plus !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="dept"><xsl:value-of select="profileName/header[2]/row/col[4]"></xsl:value-of></xsl:variable>               
    <xsl:variable name="prof"><xsl:value-of select="profileName/header[2]/row/col[5]"></xsl:value-of></xsl:variable>
    Si je met ceci sa fonctionne, mais d'après moi j'utilise bien xpath:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="dept">5</xsl:variable>               
    <xsl:variable name="prof">8</xsl:variable>
    Quel xPath dois je utiliser alors???

  8. #8
    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
    essaye en global mais avec un / au début c'est l'élément qu'il faut atteindre avant d'arriver a ta première blise du XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name="dept"><xsl:value-of select="/profileName/header[2]/row/col[4]"/></xsl:variable>                
    <xsl:variable name="prof"><xsl:value-of select="/profileName/header[2]/row/col[5]"/></xsl:variable>
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  9. #9
    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
    Si je met ceci sa fonctionne, mais d'après moi j'utilise bien xpath:
    Code:

    <xsl:variable name="dept">5</xsl:variable>
    <xsl:variable name="prof">8</xsl:variable>



    Quel xPath dois je utiliser alors???

    ca c'est pas du XPATH XPATH c'est le fait de naviguer dans ton xml:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "><xsl:value-of select="[color=red]/profileName/header[2]/row/col[4][/color]"/></xsl:variable>
    Ce qui est entre la balise color=red ca c'est du XPATH
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  10. #10
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par virgul
    essaye en global mais avec un / au début c'est l'élément qu'il faut atteindre avant d'arriver a ta première blise du XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name="dept"><xsl:value-of select="/profileName/header[2]/row/col[4]"/></xsl:variable>                
    <xsl:variable name="prof"><xsl:value-of select="/profileName/header[2]/row/col[5]"/></xsl:variable>
    Sa ne fonctionne pas je ne comprends pas pourquoi !

    Par contre pour la seconde partie je sais que ce que j'ai mis n'est pas du xpath, je voulais juste tester en mettant directement une valeur dans ma variable !! Ici en mettant 5 je voulais juste dire que sa marchai, mais dans le cas contraire avec <xsl:value-of select="/profileName/header[2]/row/col[5]"/></ je ne retreouvais pas 5 dans ma variable, celle ci est vide !!

    De plus est ce que cela peu influencer quelque chose que mon template soit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:template match="/"> 
    <xsl:apply-templates select="profileName/header[1]"/> 
    </xsl:template> 
    <xsl:template match="profileName/header">
    En tout cas déjà un tout grand merci a toi

  11. #11
    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
    on est d'accord ta variable globale tu l'a faite hors d'un template a la racine de stylesheet?

    essaye de faire un value-of de ta valeur voir ce quelle contient!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  12. #12
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Voilà ou je les ai mises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:variable name="dept"><xsl:value-of select="/profileName/header[2]/row/col[4]"/></xsl:variable>               
    <xsl:variable name="prof"><xsl:value-of select="/profileName/header[2]/row/col[5]"/></xsl:variable>
    <xsl:template match="/"> 
    <xsl:apply-templates select="profileName/header[1]"/> 
    </xsl:template> 
    <xsl:template match="profileName/header">

    Et si je fais sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <b><xsl:value-of select="/profileName/header[2]/row/col[4]"></xsl:value-of></b>
    Sa n'affiche rien dans ma page HTML

  13. #13
    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
    envoi moi ton e-mail par mp je vais t'envoyer un petit prog qui te permettra de testé te requête XPATH et de voir qu'es ce qui cloche!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

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

Discussions similaires

  1. [XSL] Problème avec fichier distant
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2006, 20h24
  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. [xsl] Problème avec for-each
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/03/2006, 11h28
  4. [xsl] problème avec xml:space
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/12/2005, 16h22
  5. [XSL] problème avec copy espace de nom
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 15h18

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