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 :

Boucle for-each et attribut ref (XSL)


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut Boucle for-each et attribut ref (XSL)
    Bonjour à tous,

    J'ai un fichier XML contenant une liste de livres et pour lesquels sont associés un auteur.

    Je cherche à afficher dans un fichier XSL, grâce à une boucle for-each, la liste des titres avec les auteurs associés.

    Pour le moment, l'affichage des livres via la boucle fonctionne, mais je n'arrive pas à afficher les auteurs en me servant de l'attribut "ref" et "id".

    Auriez-vous une piste à me fournir svp?

    Par avance merci
    Bien cordialement,


    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
     
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
        <xsl:template match="/livres">
     
            <html>
                <head><title> Livres </title></head>
                <body>
                      <table>
                      <tr>
                            <th>Titre</th>
                           <th>Auteur</th>
                      </tr>
                    <xsl:for-each select="livre">                 
                        <tr>
                            <td><xsl:apply-templates select="titre"/></td>
                            <td><!--  Ici, j'aimerais afficher le NOM + PRENOM de l'auteur --></td>
                        </tr>
                    </xsl:for-each>
                    </table>
                </body>
            </html>
     
        </xsl:template>
    </xsl:stylesheet>

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <livres xmlns:xml="http://www.w3.org/XML/1998/namespace">
     
        <livre id='AJ01' ref="JonathanCoe">
            <titre>La pluie, avant qu'elle tombe</titre>
        </livre>
     
        <livre id='AJ02' ref="CharlesDickens">
            <titre>De grandes espérances</titre>
        </livre>
     
        <auteur id="JonathanCoe"> 
                <nom>Coe</nom> 
                <prenom>Jonathan </prenom> 
        </auteur> 
     
        <auteur id="CharlesDickens"> 
                <nom>Dickens</nom> 
                <prenom>Charles</prenom> 
        </auteur> 
     
    </livres>

  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
    Commençons par juste le prénom : "l'élément <prenom> fils de l'élément <auteur> dont l'id est égal au ref du livre en cours"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //auteur[@id = current()/@ref]/prenom
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Par défaut
    Bonjour thelvil et merci pour ta réponse.

    J'ai testé ta solution et cela fonctionne très bien.

    Pour afficher le nom/prénom, j'ai donc écrit le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <td>
    <xsl:apply-templates select="//auteur[@id = current()/@ref]/prenom" /> 
    <xsl:apply-templates select="//auteur[@id = current()/@ref]/nom" />
     </td>
    Y'a t'il une façon plus élégante d'afficher le nom et prénom, sans passer par deux "apply-templates"?

    Par exemple en concaténant le nom et prénom avec un espace?

    Bien cdlt,

  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
    Tu peux utiliser value-of. Je préfère souvent apply-templates parce que c'est plus flexible, mais bon c'est aussi moins clair.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name="auteur" select="//auteur[@id = current()/@ref]"/>
    <xsl:value-of select="concat($auteur/prenom, ' ', $auteur/nom)"/>
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!-- Le for-each qui ne sélectionne qu'un seul élément, est juste un truc pour changer d'élément en cours et éviter d'aller le chercher à chaque fois -->
    <xsl:for-each select="//auteur[@id = current()/@ref][1]">
      <xsl:value-of select="concat(prenom, ' ', nom)"/>
    </xsl:for-each>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. boucle for each
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/08/2006, 20h50
  2. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  3. aide vba boucle for each paramétrée en range
    Par gotlieb dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/07/2006, 08h55
  4. [VBA-E] erreur boucle for each
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h38
  5. Boucle For each
    Par roots_man dans le forum ASP
    Réponses: 10
    Dernier message: 18/02/2005, 09h55

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