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] problème avec for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Points : 20
    Points
    20
    Par défaut [XSLT] problème avec for-each
    Bonjour tout le monde,
    le code suivant est le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0"?>
    <?xml-stylesheet version="1.0" type="text/xsl" href="Enseignant.xsl"?>
    <institut>
     
    	<contact>
    		<dept nom="Informatique" fax="73 222 222"/>
    		<dept nom="Telecoms" fax="73 111 111"/>
    	</contact>
     
    	<enseignant nom="Ben Saleh" prenom="Ali">
    		<email affiche="oui">ali.bensaleh@yahoo.fr</email>
    		<matiere vol="6"> Théorie des graphes </matiere>
    		<matiere vol="3"> Programmation XML </matiere>
    		<departement>Informatique</departement>
    	</enseignant>
     
    	<enseignant nom="Ben Ali" prenom="Mehdi">
    		<email affiche="oui">mehdi.benali@yahoo.fr</email>
    		<matiere vol="4"> Bases de données </matiere>
    		<matiere vol="2"> UML </matiere>
    		<departement>Informatique</departement>
    	</enseignant>
     
    	<enseignant nom="Tarek" prenom="Nour">
    		<email affiche="non">nour.tarek@yahoo.fr</email>
    		<matiere vol="16"> Protocoles Internet </matiere>
    		<matiere vol="4"> Réseaux Telecoms </matiere>
    		<departement>Telecoms</departement>
    	</enseignant>
     
    	<enseignant nom="Youssef" prenom="sami">
    		<email affiche="non">sami.youssef@yahoo.fr</email>
    		<matiere vol="5"> Files d'attente</matiere>
    		<departement>Telecoms</departement>
    	</enseignant>
     
    </institut>
    Sachant que les éléments XML sont déjà tiés (dans le fichier XML) selon le département, je veux faire un fichier XSLT (contenant une seule boucle xsl:for-each) permettant d'afficher la liste des profs par département.
    L'affichage se fera comme suit (Dans le cas où il y a plusieurs spécialités, seule la première est affichée).
    - Nom du département : fax -
    Nom Prénom
    Spécialité (volume horaire)

    Nom Prénom
    Spécialité (volume horaire)
    ...
    - Nom du département : fax -
    ...
    j'ai parvenu à le faire avec deux boucles xsl:for-each
    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"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="/institut">
          <html>
             <body>
     
                <xsl:for-each select="./contact/dept">
                   <xsl:variable name="nomd" select="@nom" />
     
                   <center>- 
                   <a name="{@nom}" />
     
                   <xsl:value-of select="@nom" />
     
                   : 
                   <xsl:value-of select="@fax" />
     
                   -</center>
     
                   <br />
     
                   <xsl:for-each select="/institut/enseignant[departement=$nomd]">
                   <xsl:value-of select="@nom" />
     
                   ~ 
                   <xsl:value-of select="@prenom" />
     
                   <br />
     
                   <xsl:value-of select="./matiere" />
     
                   ( 
                   <xsl:value-of select="./matiere/@vol" />
     
                   ). 
                   <br />
                   </xsl:for-each>
     
                   <br />
                </xsl:for-each>
             </body>
          </html>
       </xsl:template>
    </xsl:stylesheet>
    et merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    et pourquoi tu ne veux qu'un seule boucle for-each?
    parce que là tu n'as pas vraiment le choix

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Merci de me répondre,
    mais c'est un travail demandé par notre professeur et il ne veut qu'un seule boucle xsl:for-each.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    bof, template ou for-each, je crois pas que ça change grand chose au niveau du proc xslt, mais c'est toujours un peu plus propre.
    Tu dois pouvoir adapter ça:
    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
    <?xml version="1.0" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method = "xml"  version="1.0" encoding="iso-8859-1" omit-xml-declaration="no" standalone="no" indent="yes"  />
     
    	<xsl:template match="/institut">
    	<profList>
    		<xsl:for-each select = "contact/dept">
    			<xsl:variable name="nom" select="@nom"/>
    			<departement nom="{$nom}">
    				<xsl:apply-templates select="/institut/enseignant[departement = $nom]"/>
    			</departement>
    		</xsl:for-each>
    	</profList>
    	</xsl:template>
     
    	<xsl:template match="enseignant">	
    		<xsl:copy-of select = "."/>
    	</xsl:template>
     
    </xsl:stylesheet>

  5. #5
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    je pense qu'il n'y a pas de différences au niveau perf mais cette dernière solution est plus jolie

Discussions similaires

  1. [XML/XSL]problème avec for-each
    Par mavina dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/06/2006, 15h28
  2. [xsl] Problème avec for-each
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/03/2006, 11h28
  3. [XSLT]problème avec for-each incompréhensible
    Par trotters213 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/02/2006, 10h31
  4. [XML][XSLT] Débutant {Probléme avec For-each-group}
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/01/2006, 21h38
  5. [VB.NET] Problème avec For Each...
    Par cyrcroix dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/06/2005, 10h49

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