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 :

Tester la présence d'un valeur


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut Tester la présence d'un valeur
    Bonjour,

    je possède le xml suivant
    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
     
    <xml>
        <user>
             <id>51</id>
             <admin/>
             <id_client>42</id_client>
             <nom_client>TestAvecTel</nom_client>
             <help>-1</help>
          </user>
       <request>
          <ListeClient>
             <elt>
                <nom_client>La Poste</nom_client>
                <id_client>1</id_client>
             </elt>
             <elt>
                <nom_client>Bouygues Telecom</nom_client>
                <id_client>2</id_client>
             </elt>
          </ListeClient>
       <request>
    </xml>
    Je souhaite tester si la valeur de xml/user/id_client est dans les différents xml/request/ListeClient/elt/id_client. J 'ai donc fait ceci mais cela ne fonctionne pas. Je précise que je débute sur ce langage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="xml/request/ListeClient/elt[id_client = xml/user/id_client]/id_client = xml/user/id_client">
     [...] 
    </xsl:if>
    Une idée ?

  2. #2
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ton test est bon, c'est juste que dans une condition (ce qui est entre crochet), tout chemin non absolu est considéré comme relatif au contexte de l'élément sur lequel porte la condition.

    Comme je doute que je me sois exprimé très clairement, voici ce que ça donne sur ton exemple précis :
    Ici ta condition est vraie si :
    • il existe au moins un élément xml/request/ListeClient/elt/id_client ayant la même valeur qu'un élément xml/user/id_client (if principal)
    • et que cet élément xml/request/ListeClient/elt/id_client a un parent elt dont le fils id_client a la même valeur qu'un élément xml/request/ListeClient/elt/xml/user/id_client (condition entre crochets)


    Donc on voit bien que ce n'est pas ce que tu veux
    Il aurait fallut mettre soit un chemin relatif par rapport au contexte actuel : ...[id_client = current()/xml/user/id_client], soit un chemin absolu : ...[id_client = /xml/user/id_client].

    Quoi qu'il en soit, tu peux virer cette condition parce que, bien écrite, elle est totalement équivalente à celle du if principal. Tu peux donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml/request/ListeClient/elt/id_client = xml/user/id_client

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut
    Woha ! Réponse éclair !

    Malheureusement je peux pas tester le code de suite.
    Mon problème provient du fait qu'il y est plusieurs elt dans ListeClient.
    Est ce que xml/request/ListeClient/elt/id_client = xml/user/id_client permet de tester dans le if tous les id_client situé dans tous les différents elt ?

    Je m'explique, est ce que xml/request/ListeClient/elt/id_client = xml/user/id_client retournera vrai si un id_client est identique ou si tout les id_client sont égaux ?

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Apparement pas si claire que ça parce que ta réponse était déjà dedans.

    Citation Envoyé par Loceka Voir le message
    ta condition est vraie si :
    • il existe au moins un élément xml/request/ListeClient/elt/id_client ayant la même valeur qu'un élément xml/user/id_client (if principal)
    Donc on passe dans ton if si au moins un élément dont le "chemin" est xml/request/ListeClient/elt/id_client a pour valeur "la" valeur de xml/user/id_client.

    Sachant que c'est plus large que ça vu que, s'il y'avait plusieurs éléments ayant pour chemin xml/user/id_client, on passerait dans le if s'il existe au moins une valeur de l'un qui vaut une valeur de l'autre.

    Avec un exemple, on passe dans le if avec ce XML (il y'a l'ID "1" dans les deux) :
    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
    <xml>
          <user>
             <id>1</id>
          </user>
          <user>
             <id>3</id>
          </user>
          <user>
             <id>51</id>
          </user>
       <request>
          <ListeClient>
             <elt>
                <id_client>1</id_client>
             </elt>
             <elt>
                <id_client>2</id_client>
             </elt>
          </ListeClient>
       <request>
    </xml>
    Mais pas avec ce 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
    17
    18
    19
    20
    21
    <xml>
          <user>
             <id>1</id>
          </user>
          <user>
             <id>3</id>
          </user>
          <user>
             <id>51</id>
          </user>
       <request>
          <ListeClient>
             <elt>
                <id_client>2</id_client>
             </elt>
             <elt>
                <id_client>4</id_client>
             </elt>
          </ListeClient>
       <request>
    </xml>

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut
    ah ouais, pardon. J'ai lu trop vite ton message!
    merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2012, 15h31
  2. [XL-2003] Tester présence d'une valeur sur une plage donnée
    Par Monsieur Peck dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/04/2010, 18h51
  3. Comment tester la présence d'une valeur dans une liste?
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/06/2008, 16h09
  4. [Tableaux] Tester la présence d'une valeur
    Par emmma dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2007, 11h50
  5. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 15h29

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