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 :

[XSLT][ACCESS]condition sur valeur


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 [XSLT][ACCESS]condition sur valeur
    Bonjour, je suis débutant en XML/XSL et j'ai besoin d'un petit coup de pouce. J'ai un fichier XML (FIC1.xml généré par ACCESS) que je dois transformer en un autre fichier XML (FIC2.xml toujours par ACCESS mais ce n'est pas le problème). J'ai utilisé un fichier .xsl (en fait j'ai déjà le méchanisme qui fonctionne et je dois le modifier).
    Mon soucis c'est de vouloir utiliser un ID d'un élément pour faire un lien (comme pour les bases de données), c'est à dire:

    (je ne peux pas utiliser la balise code, dsl)
    Le code XML FIC1.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
    22
    23
    24
    25
    26
    </dataroot>
    <INVENTAIRE>
       <INVENTAIRE_USAGE>
          <SN>22</SN>
          <ID>666</ID>
       <INVENTAIRE_USAGE>
    </INVENTAIRE>
     
    <INVENTAIRE>
       <INVENTAIRE_USAGE>
          <SN>56</SN>
          <ID>667</ID>
       <INVENTAIRE_USAGE>
    </INVENTAIRE>
     
    <USAGE>
    <DT_CD>OK</DT_CD>
    <ID_usage>666</ID_usage>
    </USAGE>
     
    <USAGE>
    <DT_CD>OK</DT_CD>
    <ID_usage>667</ID_usage>
    </USAGE>
     
    </dataroot>


    le 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="//root">
    <INVENTAIRES>
    <INVENTAIRE>
    <xsl:for-each select="./INVENTAIRE">
    <SN><xsl:value-of select="SN" /></SN>
    </xsl:for-each>
    </INVENTAIRE>
    </INVENTAIRES>
    <USAGES>
    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE[ID = ./USAGE/ID_usage]">
    <INVENTAIRE_USAGE>
    <SN><xsl:value-of select="SN" /></SN>
    <DT_CD><xsl:value-of select="DT_CD" /></DT_CD>
    </INVENTAIRE_USAGE>
    </xsl:for-each>
    </USAGES>
    </xsl:template>
    </xsl:stylesheet>
    Ce que je veux obtenir FIC2.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
    <INVENTAIRES>
       <INVENTAIRE>
          <SN>22</SN>
       </INVENTAIRE>
       <INVENTAIRE>
          <SN>56</SN>
       </INVENTAIRE>
    </INVENTAIRES>
     
    <USAGES>
       <INVENTAIRE_USAGE>
          <SN>22</SN>
         <DT_CD>OK</DT_CD>  -- à <USAGE>
       </INVENTAIRE_USAGE>
       <INVENTAIRE_USAGE>
          <SN>56</SN>
         <DT_CD>OK</DT_CD>  -- à <USAGE>
       </INVENTAIRE_USAGE>
    </USAGES>
    J'ai pas été très clair?!! Je veux pouvoir mettre une condition sur un élément (c'est bien un élément ?) avant de l'afficher en fonction d'un autre élément (et non d'une valeur en dure). C'est surement un pb de syntaxe.

    Merci de votre aide.
    Aimez-vous les uns les autres.

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

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

    1°) pourquoi ne peux-tu pas utiliser la balise code !????

    2°) si tu nous disais ce que tu obtiens avec le xslt que tu as indiqué, car, à vue de nez, il devrait faire ce que tu souhaites.

    juste une petite remarque, le match de ton template est mauvais, tu as du voir indiquer "//dataroot" et non "//root"
    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)

  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.

    1) Heu, c'est quoi la balise "code" ?

    2) ce qui ce passe : la moulinette ACCESS pour appliquer le XSL me sort une erreur donc j'ai un pb de syntaxe ou de grammaire dans mon code.

    Donc pour toi faire une condition sur deux éléments s'écrit bien:

    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE[ID = ./USAGE/ID_usage]">
    Aimez-vous les uns les autres.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par kor
    1) Heu, c'est quoi la balise "code" ?
    Lorsque tu rédiges un message, tu peux insérer du code source, mais également des citations, des images, des liens, ... à l'intérieur de balises BBcode. Pour plus d'informations, je te réfère au Guide du BBCode

  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
    Désolé, j'y étais plus, la balise code, bien sûr! J'ai un accès limité à internet et je peux pas faire ce que je veux. Quand j'essaie d'insérer avec la balise code ca freeze et rien ne se passe. Voilà !

    Mais ca ne résout pas mon problème!!!
    Aimez-vous les uns les autres.

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    1°) la balise code sert à rendre ton code plus lisible (tu va voir ce que ça donne, je vais l'utiliser un peu plus bas), il te suffit d'insérer [ c o d e ] avant et [ / c o d e ] après ton code (sans les espace bien sûr ), ou tu as un bouton qui le fait pour toi en haut, sous le champ pour le titre du message !

    2°) je l'aurais plutôt mis d'une autre façon, càd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE">
    <xsl:variable name="ID" select="./ID" />
    <INVENTAIRE_USAGE>
    <SN><xsl:value-of select="./SN" /></SN>
    <DT_CD><xsl:value-of select="//USAGE[./ID_usage = $ID]/DT_CD" /></DT_CD>
    </INVENTAIRE_USAGE>
    </xsl:for-each>
    sinon, il aurait aurait été bien plus dur de remonter au noeud courant dans l'expression XPath pour le test...

    Au fait, je te conseil de revoir totalement ton XML est ton XSLT, ils sont bourrés de fautes (mal formé pour le XML rien que la première balise : </dataroot> !!!!!!!, mauvais XPath pour le XSLT, etc... j'ai du les corriger quand j'ai voulu les utiliser pour faire des tests, voilà les bons code : 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
    22
    23
    24
    25
    26
    <dataroot>
    <INVENTAIRE>
    <INVENTAIRE_USAGE>
    <SN>22</SN>
    <ID>666</ID>
    </INVENTAIRE_USAGE>
    </INVENTAIRE>
     
    <INVENTAIRE>
    <INVENTAIRE_USAGE>
    <SN>56</SN>
    <ID>667</ID>
    </INVENTAIRE_USAGE>
    </INVENTAIRE>
     
    <USAGE>
    <DT_CD>OK</DT_CD>
    <ID_usage>666</ID_usage>
    </USAGE>
     
    <USAGE>
    <DT_CD>OK</DT_CD>
    <ID_usage>667</ID_usage>
    </USAGE>
     
    </dataroot>
    XSLT :
    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
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="/dataroot">
    <INVENTAIRES>
    <INVENTAIRE>
    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE">
    <SN><xsl:value-of select="./SN" /></SN>
    </xsl:for-each>
    </INVENTAIRE>
    </INVENTAIRES>
    <USAGES>
    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE">
    <xsl:variable name="ID" select="./ID" />
    <INVENTAIRE_USAGE>
    <SN><xsl:value-of select="./SN" /></SN>
    <DT_CD><xsl:value-of select="//USAGE[./ID_usage = $ID]/DT_CD" /></DT_CD>
    </INVENTAIRE_USAGE>
    </xsl:for-each>
    </USAGES>
    </xsl:template>
    </xsl:stylesheet>
    et le résultat avec ça est :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <INVENTAIRES>
    <INVENTAIRE>
    <SN>22</SN>
    <SN>56</SN>
    </INVENTAIRE>
    </INVENTAIRES>
    <USAGES>
    <INVENTAIRE_USAGE>
    <SN>22</SN>
    <DT_CD>OK</DT_CD>
    </INVENTAIRE_USAGE>
    <INVENTAIRE_USAGE>
    <SN>56</SN>
    <DT_CD>OK</DT_CD>
    </INVENTAIRE_USAGE>
    </USAGES>
    ...

    Woilà, bonne continuation, tu peux cliquer sur en bas à gauche
    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)

  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
    tes balises inventaires usages ne sont pas fermés dans ton xml.
    Pour un xml valide, voici un code qui marche(pour ton exemple)
    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
    <?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
     
    <xsl:template match="//dataroot"> 
    <INVENTAIRES> 
     
    <xsl:for-each select="INVENTAIRE"> 
    <INVENTAIRE> 
    <SN><xsl:value-of select="INVENTAIRE_USAGE/SN" /></SN> 
    </INVENTAIRE> 
    </xsl:for-each> 
     
    </INVENTAIRES> 
    <USAGES> 
    <xsl:for-each select="INVENTAIRE/INVENTAIRE_USAGE[boolean(//USAGE[ID_usage=./ID])=true]"> 
     
    <INVENTAIRE_USAGE> 
    <SN><xsl:value-of select="SN" /></SN> 
     
    <DT_CD><xsl:value-of select="//USAGE[ID_usage=current()/ID]/DT_CD" /></DT_CD> 
    </INVENTAIRE_USAGE> 
    </xsl:for-each> 
    </USAGES> 
    </xsl:template> 
    </xsl:stylesheet>

  8. #8
    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
    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE">
    Attention ton xslt ne fait pas le tri sur les ID

  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 te remercie beaucoup, j'essaie ce que tu me conseille et je tiens au courant dans la matinée.

    Les fautes tiennent au faites que je ne peux malheureusement pas donner le vrai code et donc je le simplifie et l'adapte pour cibler mon problème (comme je le fais en live et que je suis débutant bah c'est très beau à voir!).

    Merci encore.
    Aimez-vous les uns les autres.

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    En effet, l'usage de curent() évite de psser par une variable, et Erwy à ajouter un petit contrôlle, je prenais en effet tous les INVENTAIRE_USAGE et j'allais ensuite chercher le USAGE correspondant, courant ainsi le risque qu'il y ait un INVENTAIRE_USAGE sans USAGE correspondant, ce qui aurait donné une case vide...

    (pour le tri sur les ID, je le faisais ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="//USAGE[./ID_usage = $ID]/DT_CD" />
    )

    pardon pour le premier for-each, entre INVENTAIRE et INVENTAIRE_USAGE, d'après le XSLT fournis, j'avais mal vu ce tu cherchais à faire...
    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)

  11. #11
    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 encore pour votre aide. Ca marche presque. J'ai une petite question : le code que Erqy m'a donné fait quoi au juste ? Il affiche les SN dont l'ID INVENTAIRE_USAGE et USAGE sont égaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <USAGES> 
    <xsl:for-each select="INVENTAIRE/INVENTAIRE_USAGE[boolean(//USAGE[ID_usage=./ID])=true]"> 
     
    <INVENTAIRE_USAGE> 
    <SN><xsl:value-of select="SN" /></SN> 
     
    <DT_CD><xsl:value-of select="//USAGE[ID_usage=current()/ID]/DT_CD" /></DT_CD> 
    </INVENTAIRE_USAGE> 
    </xsl:for-each> 
    </USAGES>
    Admettons que je mette une autre boucle for-each à l'intérieur de celle INVENTAIRE_USAGE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <USAGES> 
    <xsl:for-each select="INVENTAIRE/INVENTAIRE_USAGE[boolean(//USAGE[ID_usage=./ID])=true]"> 
     
    <INVENTAIRE_USAGE> 
    <xsl:for-each select="//toto">
    <DTT>><xsl:value-of select="valeur"></DTT>
    </xsl:for-each> 
     
    <SN><xsl:value-of select="SN" /></SN> 
    <DT_CD><xsl:value-of select="//USAGE[ID_usage=current()/ID]/DT_CD" /></DT_CD> 
    </INVENTAIRE_USAGE> 
    </xsl:for-each> 
    </USAGES>
    En admettant que toto est un élément contenant des choses sans importance. Alors les valeurs de toto s'afficheront que si les ID précédemment cités (INVENTORY_USAGE et USAGE) seront égaux.

    C'est bien comme ca que marche la condition ? Elle s'applique à l'enselble du bloc "for-each" ?
    Aimez-vous les uns les autres.

  12. #12
    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
    Merci encore pour votre aide. Ca marche presque. J'ai une petite question : le code que Erqy m'a donné fait quoi au juste ? Il affiche les SN dont l'ID INVENTAIRE_USAGE et USAGE sont égaux.
    Non Il affiche les SN si il existe un ID_USAGE egal à l'ID de l'INVENTAIRE_USAGE testé.(mais c'est la même idée)

    Citation Envoyé par kor
    En admettant que toto est un élément contenant des choses sans importance. Alors les valeurs de toto s'afficheront que si les ID précédemment cités (INVENTORY_USAGE et USAGE) seront égaux.

    C'est bien comme ca que marche la condition ? Elle s'applique à l'enselble du bloc "for-each" ?
    Oui , c'est une façon de voir les choses, même si le processeur ne fait pas vraiment ça.
    pour chaque élement qui correspond à la selection du for-each, il execute le code contenu entre ses balises.
    Tout simplement

  13. #13
    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
    J'insiste parce que pour le moment il me sort tous les USAGE sans appliquer la conditon sur les ID. Alors j'ai aplliqué la même condition à tous les "select" mais ca ne change rien. En fait, j'ai deux boucles imbriquées brutes...
    Aimez-vous les uns les autres.

  14. #14
    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
    Et j'ai utilisé une variable car le current ne passe pas (ou je dois mal l'utiliser). Je me suis appuyé sur l'exemple de swoög.
    Aimez-vous les uns les autres.

  15. #15
    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
    montre le xslt que tu utilises, cela sera plus simple.

  16. #16
    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
    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="/dataroot">
     
      <INVENTAIRES>
        <INVENTAIRE>
        <xsl:for-each select="./INVENTAIRE">
          <SN><xsl:value-of select="./SN" /></SN>
        </xsl:for-each>
     </INVENTAIRE>
    </INVENTAIRES>
     
        <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE[boolean(/dataroot/USAGE[ID_usage= dataroot/INVENTAIRE/INVENTAIRE_USAGE/ID])=true]">
      <USAGES>
        <SN><xsl:value-of select="./SN" /></SN>
        <ID><xsl:value-of select="./ID" /></ID>
        <xsl:variable name="ID" select="./ID" />
        <xsl:for-each select="/dataroot/USAGE">
          <INVENTAIRE_USAGE>
          <SN><xsl:value-of select="SN" /></SN> 
          <DT_CD><xsl:value-of select="/dataroot/USAGE[ID_usage= $ID]/DT_CD" /></DT_CD> 
          </INVENTAIRE_USAGE>
          </xsl:for-each>
          </USAGES>
      </xsl:for-each>
     </xsl:template>
     
    </xsl:stylesheet>
    Voilà mon code.
    Aimez-vous les uns les autres.

  17. #17
    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
    <xsl:for-each select="./INVENTAIRE">
    <SN><xsl:value-of select="./SN" /></SN>
    </xsl:for-each>
    Pas conforme au xml que tu nous a donné

    <xsl:for-each select="./INVENTAIRE/INVENTAIRE_USAGE[boolean(/dataroot/USAGE[ID_usage= dataroot/INVENTAIRE/INVENTAIRE_USAGE/ID])=true]">
    Rien a voir avec ce que je t'ai donné

    ton test: je selectionne tous les INVENTAIRE/INVENTAIRE_USAGE si il existe un /dataroot/USAGE tel que son ID_usage soit égale au premier dataroot/INVENTAIRE/INVENTAIRE_USAGE/ID de l'arbre .

    le mien
    <xsl:for-each select="INVENTAIRE/INVENTAIRE_USAGE[boolean(//USAGE[ID_usage=./ID])=true]">
    je selectionne tous les INVENTAIRE/INVENTAIRE_USAGE pour lesquels il existe un USAGE dont ID_usage est égale à leur ID

  18. #18
    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
    Pour des explications entre l'element lu et l'element courant (current())
    http://erwy.developpez.com/boucle/#L1.4
    Je crois que c'est la qu'est ton problème

  19. #19
    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
    Pour l'erreur XML INVENTAIRE au lieu de INVENTAIRE_USAGE c'est une erreur de retranscription, désolé.

    Effectivement mon test n'est pas bon mais d'après ce que tu dis je ne comprends pourquoi il me met toutes les valeurs ID.

    Je vais essayer et lire ton lien, merci.
    Aimez-vous les uns les autres.

  20. #20
    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 suis trop bête. Je ne comprends la différence entre élément en cours de traitement et en cours de lecture.
    Aimez-vous les uns les autres.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Condition sur valeur d'un champs d'une table en VBA
    Par em3869 dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/08/2012, 12h49
  2. Remplissage de tableau à partir de condition sur valeurs de cellule
    Par 00seb dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/05/2012, 15h05
  3. appel script php et condition sur valeur de retour
    Par lolodev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/06/2011, 08h18
  4. Condition sur valeurs d'une gridview en edit mode
    Par badi3a82 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/11/2010, 16h59
  5. [vba-access] Test sur valeur des champs puis publipostage
    Par realthunderbolt dans le forum Access
    Réponses: 1
    Dernier message: 01/08/2006, 16h38

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