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 :

equivalent du SELECT FROM mais en xpath d'une BD xml


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 86
    Par défaut equivalent du SELECT FROM mais en xpath d'une BD xml
    salut a vous,


    j'ai la bd suivante stocker dans un 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="etudiant.xsl" type="text/xsl"?>
    <formation>
       <etudiants>
         <etudiant idE='E1'  nom='DUBOIS'  idCC1='10'  idCC2='  '/>
         <etudiant idE='E2'  nom='MARC' idCC1='10'  idCC2='11' />
       </etudiants>
       <controleCs>
           <controleC idCC='10'  idE='E1'  note1='55%'  note2='42%'   />
           <controleC idCC='10'  idE='E2'  note1='89%'  note2='100%'  />
           <controleC idCC='11'  idE='E2'  note1='20%'  note2='80%'  />
     
     
        </ControleCs>
    </formation>
    j'aimerai afficher tous les resultats de Marc a tous les controleC. voila ce que j'ai fait dans mon fichier 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>  
     <xsl:template match="/">
     
     <html>
                <head> <title> RESULTATS DE MARC</title>
                </head>
                <body>
                    <h2> RESULTATS DE MARC</h2>
                    <table border="2">
                     <tr>
     
                         <th>idCC </th>
                         <th> note1 </th>
                         <th>note2</th>
                     </tr>
     
     
                        <xsl:for-each select="formation/controleCs/controleC[@idE=formation/etudiants/etudiant[@nom='MARC']/@idE]">
     
                            <tr>
     
                             <td>
                              <xsl:value-of select="formation/controleCs/controleC/@idCC"/>
                             </td>
                             <td>  
                             <xsl:value-of select="formation/controleCs/controleC/@note1"/>
                             </td>
                             <td>  
                            <xsl:value-of select="formation/controleCs/controleC/@note2"/>
                             </td>
                             </tr>
     
                          </xsl:for-each>
     
     
                    </table>
                </body>
        </html>
        </xsl:template>
    </xsl:stylesheet>
    MALHEUREUSEMENT J'ai pas de resultat , en fait mon tableau html s'affiche juste avec les en tete, aucune autre ligne et aucun contenu ne s'affiche.


    quelqu'un a t'il une idee de comment avoir le resultat de ma requete? en effet c'est l'equivalent a la requete SQL : SELECT .... FROM etudiants,controleC where etudiant.nom="MARC" et controleC.idE=etudiant.idE mais plutot en Xpath, mais je n'y arrive pas.

    Merci d'avance pour vos propositions.

  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
    J'ai pas testé mais je crois que ton erreur est là :
    Citation Envoyé par cassidy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="formation/controleCs/controleC[@idE=formation/etudiants/etudiant[@nom='MARC']/@idE]">
    Lorsque tu es entre crochets [] (je ne connais pas le terme adhoc ), l'élément courant est l'élément sur lequel tu as posé ces crochets. Donc ici tu compares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    formation/controleCs/controleC/@idE
    et
    formation/controleCs/controleC/formation/etudiants/etudiant[@nom='MARC']/@idE
    essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="formation/controleCs/controleC[@idE=/formation/etudiants/etudiant[@nom='MARC']/@idE]">

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 86
    Par défaut
    merci loceka,

    pour ta proposition.
    je viens de l' essayer bien que le resultat a change un tout petit peu, mais le contenu ne s'affiche toujours pas, cette fois si les en-tete s'affiche avec une ligne des cellules pas assez larges pour que le contenue soit vu, mais sans contenu .
    j'ai essaye toutes les modifications possible en fonction de ma comprehension et je n'y arrive pas peut etre parce que je suis debutant en xpath.

    en fouillant j'ai trouve la fonction Key(), je vais lire la documentation dessus si ca peut me donner des idees.

    sinon, si quelque a une idee ou une proposition je suis prenante.


    merci d'avance.

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 86
    Par défaut
    tu avais raison loceta!

    en plus de la suggestion que tu m'as faite d'ajouter le / cad d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="formation/controleCs/controleC[@idE=/formation/etudiants/etudiant[@nom='MARC']/@idE]">
    mais en plus j'ai applique la meme chose lors de l'affichage des valeurs

    cad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="/formation/controleCs/controleC/@idCC"/>
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="formation/controleCs/controleC/@idCC"/>
    comme j'avais mis au depart.

    merci bien.

    je suis en train de m'assurer que mon code marche pour tous les etudiants a rechercher dans la base xml.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 86
    Par défaut
    A l'aide!

    Apres avoir testé mon code precedent ,je me rends compte que j'ai des resultats mais pas le resultat attendus: en effet voila le fichier 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>  
     <xsl:template match="/">
        
     <html>
                <head> <title> RESULTATS DE DUBOIS</title>
                </head>
                <body>
                    <h2> RESULTATS DE DUBOIS</h2>
                    <table border="2">
                     <tr>
                         
                         <th>idCC </th>
                         <th> note1 </th>
                         <th>note2</th>
                     </tr>
                     
                       
                        <xsl:for-each select="formation/controleCs/controleC[@idE=/formation/etudiants/etudiant[@nom='DUBOIS']/@idE]">
                                              
                            <tr>
                              
                             <td>
                              <xsl:value-of select="/formation/controleCs/controleC/@idCC"/>
                             </td>
                             <td>  
                             <xsl:value-of select="/formation/controleCs/controleC/@note1"/>
                             </td>
                             <td>  
                            <xsl:value-of select="/formation/controleCs/controleC/@note2"/>
                             </td>
                             </tr>
                         
                          </xsl:for-each>
                        
                     
                    </table>
                </body>
        </html>
        </xsl:template>
    </xsl:stylesheet>
    il me donne bien le resultat de DUBOIS;
    mais quand j'utilise ce meme code pour avoir les resultats de MARC(c'est a dire en changeant le nom DUBOIS par MARC) j'ai encore les résultats de MARC qui s'affiche ce qui n'est pas normal.

    Me disant que le select de mon For-each n'est pas approprié j'ai opté pour ceci:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>  
     <xsl:template match="/">
     
     <html>
                <head> <title> RESULTATS DE DUBOIS</title>
                </head>
                <body>
                    <h2> RESULTATS DE DUBOIS</h2>
                    <table border="2">
                     <tr>
     
                         <th>idCC </th>
                         <th> note1 </th>
                         <th>note2</th>
                     </tr>
     
     
                    <xsl:for-each select="formation/etudiants/etudiant">
                      <xsl:if test="@nom='MARC'">
                         <xsl:variable name="ide" select="@idE"/>
                          <xsl:for-each select="/formation/controleCs/controleC"> 
                           <xsl:if test=" $ide = @idE">                                          
                            <tr>
     
                             <td>
                              <xsl:value-of select="/formation/controleCs/controleC/@idCC"/>
                             </td>
                             <td>  
                             <xsl:value-of select="/formation/controleCs/controleC/@note1"/>
                             </td>
                             <td>  
                            <xsl:value-of select="/formation/controleCs/controleC/@note2"/>
                             </td>
                             </tr>
     
                          </xsl:for-each>
     
     
                    </table>
                </body>
        </html>
        </xsl:template>
    </xsl:stylesheet>
    avec ce dernier code, au lieu d'avoir les notes de marc comme stockées dans le fichier xml:

    idCC note1 note2
    10 89% 100%
    11 20% 80%


    j'ai plutot

    idCC note1 note2
    10 55% 42%
    10 55% 42%


    qui est en fait la note de DUBOIS mais 2 fois

    j'ai l'impression que mon for-each ne se deplace pas dans tous les éléments controleC de mon fichier xml. mais reste au 1er qu'il trouve et Ittere.

    Quelqu'un a t'il une idee de comment resoudre ca?

    Merci d'avance pour vos propositions.

  6. #6
    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
    Au contraire, je dirais que pour une fois le for-each a bien son utilité ici.

    Par contre tu n'as apparement pas compris que, une fois dans ta boucle (for-each), l'élément actuel est l'élément retourné par le for-each. Il te faut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:for-each select="formation/controleCs/controleC[@idE=/formation/etudiants/etudiant[@nom='MARC']]">
    	<tr>
    		<td>
    			<xsl:value-of select="@idCC"/>
    		</td>
    		<td>  
    			<xsl:value-of select="@note1"/>
    		</td>
    		<td>  
    			<xsl:value-of select="@note2"/>
    		</td>
    	</tr>
    </xsl:for-each>

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/11/2012, 12h58
  2. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  3. [SYBASE] Select case mais dans le from !!!
    Par soulriver dans le forum Sybase
    Réponses: 5
    Dernier message: 25/07/2005, 17h14
  4. Equivalent du Select * from ::Fn_Fonction()
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/07/2004, 09h48
  5. equivalent de select nextval from dual en SQL-Server ?
    Par toze dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2003, 09h17

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