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]boucle imbriquée avec condition


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    kor
    kor est déconnecté
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 34
    Points
    34
    Par défaut [XSL]boucle imbriquée avec condition
    Fichier 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
     
    <A>
       <AA>
          <ID>35</ID>
       </AA>
    </A>
     
    <B>
       <ID> 35 </ID>
       <NOM>Denis</NOM>
    </B>
     
    <B>
       <ID> 36 </ID>
       <NOM>David</NOM>
    </B>

    fichier XSL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:for-each select="//A/AA"> 
        <xsl:variable name="ID" select="./ID" />
        <xsl:for-each select="//B[boolean([//B[ID=current()/ID])=true]"> 
       <NOM><xsl:value-of select="//B[ID=$ID]/NOM" /></NOM>
       </xsl:for-each> 
    </xsl:for-each>

    Quelle est la syntaxe exacte pour une boucle for imbriqué avec condition (c'est surtout la condition qui m'intéresse)?
    Je voudrais utiliser current comment je peux faire.


    Le résultat me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <NOM>Denis</NOM>
    <NOM>Denis</NOM>
    En fait, le filtre fonctionne sur les nom (select) et pas sur le for-each (il recopie tous les éléments de A et de B et affiche uniquement les bons nom.

    Alors que le résultat que je veux est :

  2. #2
    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 !!

    inutile de te compliquer la vie avec tous ces test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="//A/AA">
       <xsl:for-each select="//B[./ID=current()/ID]">
          <NOM>
             <xsl:value-of select="./NOM" />
          </NOM>
       </xsl:for-each>
    </xsl:for-each>
    s'il n'y a pas de //B qui ait l'ID de ton AA, alors, le AA sera simplement zappé... et réciproquement...

  3. #3
    kor
    kor est déconnecté
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta réponse et ca marche.

    C'est bizarre, j'avais un exemple que Erwy m'avait donné avec un boolean. Alors il sert à quoi le boolean ?

  4. #4
    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
    Normalement il est inutile.
    Parfois on le rajoute juste pour la clarté ou la sécurité sir le test est un peu "complexe"

  5. #5
    kor
    kor est déconnecté
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    En enlevant ca a marché... Je devais sûrement mal l'écrire!

    Merci.

  6. #6
    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
    peut-être...

    Un petit pour la route ? (en bas à gauche )

  7. #7
    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
    Citation Envoyé par kor
    En enlevant ca a marché... Je devais sûrement mal l'écrire!

    Merci.
    Je n'avais pas regardé ton test
    Tu ne peux pas faire de boolean simplement sur une condition=> [...]
    Ton boolean doit porter sur un noeud
    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//B[boolean(//B[ID=current()/ID)=true]"
    En xslt un boolean qui contient un noeud est vrai si il existe au moins un noeud de cette sorte

    et en effet ici le //B est mauvais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//B[boolean(self::*[ID=current()/ID)=true]"

  8. #8
    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
    au fait, pour avoir true, ce n'est pas true qu'il faut app, mais true() (me semble-t-il)

  9. #9
    kor
    kor est déconnecté
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Je crois que tu as raison swoög.

    Merci encore à tous.

  10. #10
    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
    Citation Envoyé par Swoög
    au fait, pour avoir true, ce n'est pas true qu'il faut app, mais true() (me semble-t-il)
    Non, c'est une valeur pas une fonction
    http://www.w3.org/TR/xpath#booleans

  11. #11
    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
    Il semblerait que les deux existent...

    http://www.w3.org/TR/xpath#function-true

    enfin, c'est vrai que c'est plus logique d'utiliser directement la valeur plutôt que la fonction...

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

Discussions similaires

  1. Aide boucle for avec condition
    Par guigui33 dans le forum Images
    Réponses: 1
    Dernier message: 06/03/2008, 20h59
  2. [Smarty] boucles imbriquées avec requêtes SQL, impossible à comprendre
    Par dexxter dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 18/05/2007, 23h52
  3. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36
  4. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18
  5. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23

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