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 :

Liaison d'éléments avec ID et IDREF


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Liaison d'éléments avec ID et IDREF
    Bonjour,

    Je viens vers vous avec un problème de xsl.
    Je vous mets la dtd, quelques données xml et mon 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
    <!ELEMENT catalogue (plats,recettes,ingredients,compositions,listeAvis)>
     
    <!ELEMENT plats (plat+)>
    <!ELEMENT plat (nomPlat, typePlat)>
    <!ELEMENT nomPlat (#PCDATA)>
    <!ELEMENT typePlat (#PCDATA)>
    <!ATTLIST plat pk_idPlat ID #REQUIRED>
     
    <!ELEMENT recettes (recette+)>
    <!ELEMENT recette (nomRecette,sourceRecette,derouleRecette,tempsPrepa,difficulteRecette)>
    <!ELEMENT nomRecette (#PCDATA)>
    <!ELEMENT sourceRecette (#PCDATA)>
    <!ELEMENT derouleRecette (#PCDATA)>
    <!ELEMENT tempsPrepa (#PCDATA)>
    <!ELEMENT difficulteRecette (#PCDATA)>
    <!ATTLIST recette pk_idRecette ID #REQUIRED
    					fk_idPlat IDREF #IMPLIED>
    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
    34
    35
    <catalogue>
        <plats>
            <plat pk_idPlat="P01">
                <nomPlat>Crêpes</nomPlat>
                <typePlat>Dessert</typePlat>
            </plat>
        </plats>
     
    <recettes>
            <recette pk_idRecette="R01" fk_idPlat="P01">
                <nomRecette>Crêpes faciles et délicieuses</nomRecette>
                <sourceRecette>http://www.papillesetpupilles.fr/2011/01/crepes-faciles.html/</sourceRecette>
                <derouleRecette>Tamisez la farine dans un saladier. Ajoutez le sel, le sucre en 
                    poudre et le sucre vanillé puis les œufs et mélangez bien. Versez 
                    ensuite le lait petit à petit en mélangeant constamment pour éviter les 
                    grumeaux. Terminez en ajoutant le Cognac.
                    Pour la cuisson : A l’aide d’un papier essuie tout, huilez légèrement
                    votre poêle à crêpes. Faites la chauffer puis versez une petite louche 
                    de pâte sachant que plus vous mettez de pâte (dans des conditions 
                    raisonnables, on ne fait pas un pancake), donc plus vous mettez de pâte 
                    et plus elle sera moelleuse et moins vous en mettez et plus elle sera 
                    croustillante;
                    2 cuissons possible :
                    Soit vous laissez cuire environ 2 
                    minutes puis vous la retournez et laissez cuire 1 minute 
                    supplémentaire.{et si vous vous en sentez les capacités, vous la faites 
                    sauter }.Soit, au bout d’une à deux minutes de 
                    cuisson, saupoudrez-la d’une cuillère à soupe de sucre en poudre, 
                    pliez-la en 4 (comme sur la photo) et laissez chauffer quelques secondes
                    le temps que le sucre soit fondu. Servez immédiatement. La crêpe n’est 
                    ainsi cuite que d’un seul côté et mi-cuite pourrait-on dire de l’autre. 
                    Nous ne les mangeons quasiment que comme cela à la maison.</derouleRecette>
                <tempsPrepa>15 minutes</tempsPrepa>
                <difficulteRecette>Facile</difficulteRecette>
            </recette></recettes>
    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
    <body>
                <header>
                    <img>
                        <xsl:attribute name="src">
                            <xsl:value-of select="image/image.png"/>
                        </xsl:attribute>
                    </img>
                </header>
                <h1>Dessert</h1>
                <div class="crepe">
                    <h2>Recettes de crêpes</h2>
     
                    <!-- affichage du nomRecette si nomPlat = Crêpes-->
                    <xsl:for-each select="recettes/recette"> 
                     <xsl:variable name="plat" select="@fk_idPlat"/> 
                      <xsl:for-each select="plats/plat[@pk_idPlat=$plat]"> 
                            <xsl:value-of select="nomRecette"/>
                     </xsl:for-each>  
                    </xsl:for-each>
                </div>
            </body>
    Ce que j'aimerai c'est afficher le nom des recettes de crêpes. Le lien entre les deux entité se fait grâce au pk_idPlat et fk_idPlat.
    Donc ce qu'on veut c'est si la recette à un fk_idPlat=P01 alors on affiche le nomRecette (on en a 5 avec un fk_idPlat=P01 donc logiquement il nous fait une liste de cinq nomRecette différents)

    Merci pour votre aide, et n'hésitez pas à demander davantage d'informations.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Citation Envoyé par lucie62140 Voir le message
    Donc ce qu'on veut c'est si la recette à un fk_idPlat=P01 alors on affiche le nomRecette (on en a 5 avec un fk_idPlat=P01 donc logiquement il nous fait une liste de cinq nomRecette différents)
    Si. C'est un si. Pas un "pour chaque".

    Remplace par un simple <xsl:if> et les choses seront plus claires.

    Ça marche ? Bien.
    Pour information, voici ce qui n'allait pas avec le for-each. À chaque fois qu'on fait un for-each, à l'intérieur de ce for-each on change quel est l'élément en cours. ... Pour que l'élément en cours soit celui pour lequel tu es en train de faire une boucle -_-°. Donc avec un for-each sur plats/plat, ton élément en cours devient un <plat>, et ces éléments n'ont pas de <nomRecette>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Invité
    Invité(e)
    Par défaut
    Non, ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!-- affichage si la recette à un fk_idPlat=P01 alors on affiche le nomRecettee -->
                    <xsl:for-each select="recettes/recette"> 
                        <li><xsl:if test="fk_idPlat='P01'"> 
                            <xsl:value-of select="nomRecette"/>
                        </xsl:if> </li>
                    </xsl:for-each>
    Le fk_idPlat est un IDREF et non pas un PCDATA, ça change peut être quelque chose ...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    'Tention pas oublier le @

    Citation Envoyé par lucie62140 Voir le message
    Le fk_idPlat est un IDREF et non pas un PCDATA, ça change peut être quelque chose ...
    Nope.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai bien l'affichage d'une liste avec les puces mais rien à coté. Une liste vide donc alors que je devrais voir 5 nom de recettes correspondantes à mon if.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Chez moi ça marche... Si je mets ce qu'il faut pour compléter les bouts de code incomplets que tu nous as montrés.

    On peut voir à quoi ressemble ta version après correction, et sans enlever le code obligatoire pour qu'elle tourne ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/08/2006, 20h35
  2. [DOM] Insertion d'éléments avec DOM
    Par TheReturnOfMuton dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 27/06/2006, 15h33
  3. Liaison de table avec une autre base de donnée
    Par freya91 dans le forum Access
    Réponses: 1
    Dernier message: 03/06/2006, 00h08
  4. Compter nombre d'éléments avec valeur X dans un formulaire
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h49
  5. [CR7] liaison sous etat avec etat principal
    Par brahime dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 04/01/2005, 11h58

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