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 :

apply-templates : Comment préciser un Xpath ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut apply-templates : Comment préciser un Xpath ?
    Bonjour,
    Voilà ce qui m'arrive !
    J'ai le code XML ci-dessous :
    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" encoding="UTF-8"?>
    <enregistrements>
       <audios>
          <enseignements>
             <auteur nom="Dess">
                <album titre="Un sens à sa vie ?">
                   <largeur>462</largeur>
                   <regroupement sous_titre="Le travail a-t-il un sens ?">
                      <ligne debut="149,070016">Certainement !</ligne>
                      <ligne debut="934,678270">Assurément !</ligne>
                      <ligne debut="1307,860951">Ca c'est sûr !</ligne>
                   </regroupement>
                   <regroupement sous_titre="Et le dimanche… ?">
                      <ligne debut="149,070016">Euh !</ligne>
                      <ligne debut="934,678270">Ben !</ligne>
                      <ligne debut="1307,860951">Ca dépend !</ligne>
                   </regroupement>
                </album>
             </auteur>
             <auteur nom="Untel">
                <album titre="Le jour se lève !">
                   <largeur>500</largeur>
                   <regroupement sous_titre="One">
                      <ligne debut="149,070016">A</ligne>
                      <ligne debut="934,678270">B</ligne>
                      <ligne debut="1307,860951">C</ligne>
                   </regroupement>
                   <regroupement sous_titre="Two">
                      <ligne debut="149,070016">A2</ligne>
                      <ligne debut="934,678270">B2</ligne>
                      <ligne debut="1307,860951">C2</ligne>
                   </regroupement>
                </album>
             </auteur>
          </enseignements>
       </audios>
    </enregistrements>
    et le code XSL suivant, utilisé pour afficher le contenu des attributs "sous_titre" et des balises "ligne" du 1er album :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
     
    <xsl:template match="enregistrements/audios/enseignements/auteur[1]/album[1]">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
    </head>
    <body bgcolor="#FFFFFF">
    <p>Début
    </p>
    <xsl:apply-templates select="regroupement" />
    <p>End
    </p>
    </body>
    </html>
    </xsl:template>
     
     
    <xsl:template match="regroupement">
      <p>
        <xsl:apply-templates select="@sous_titre"/> 
        <xsl:apply-templates select="ligne"/> 
      </p>
    </xsl:template>
     
    <xsl:template match="@sous_titre">
    	* <xsl:value-of select="."/>
    </xsl:template>
     
    <xsl:template match="ligne">
    	- <xsl:value-of select="."/>
    </xsl:template>
     
    </xsl:stylesheet>
    Et voilà ce qui s'affiche à l'écran, en conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Début
     
    * Le travail a-t-il un sens ? - Certainement ! - Assurément ! - Ca c'est sûr !
     
    * Et le dimanche… ? - Euh ! - Ben ! - Ca dépend !
     
    End
    500
     
    * One - A - B - C
     
    * Two - A2 - B2 - C2
    -> Existe t-il un moyen, SVP, pour empêcher l'affichage de la dernière partie (qui ne correspond pas au 1er album), c'est à dire de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    500
     
    * One - A - B - C
     
    * Two - A2 - B2 - C2
    Par avance Merci pour toute suggestion que vous pourriez me faire !

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    en remplacant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="enregistrements/audios/enseignements/auteur[1]/album[1]">
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="/enregistrements/audios/enseignements/auteur[1]/album[1]">
    ca devrais fonctionner !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Merci polymorphisme,
    C'est sympa pour ta réponse
    Après, je viens d'essayer... mais ça s'affiche exactement comme avant... Désolé !
    Merci quand même !

  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
    Si t'ajoute ce template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
       <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[1]/album[1]" />
    </xsl:template>
    Et si ça marche tu devrais pouvoir simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="enregistrements/audios/enseignements/auteur[1]/album[1]">
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="album">

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Grand Merci Morbo,
    Une fois de plus, tu me sauves la mise !
    5 jours que j'essayais d'y croire... et, enfin, "La solution !"... Wouah, ça fait du bien...
    J'ai essayé texto ta suggestion et ... ça fonctionne impeccable... Amen !
    En plus, comme ça me venait comme ça, j'ai repris ta proposition pour simplifier un peu mon code !
    Du coup, y a plus besoin de rajouter les 3 lignes mais juste de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="enregistrements/audios/enseignements/auteur[1]/album[1]">
    (etc)
    <xsl:apply-templates select="regroupement" />
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
    (etc)
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[1]/album[1]/regroupement" />
    Et ça fonctionne !
    (sans que je sache d'ailleurs pourquoi !)
    M'enfin, voilà ce que ça donne, au final (pour ceux que ça intéresserait !) :
    <!-- Super méga bonne continuation à toi ! -->
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
    </head>
    <body bgcolor="#FFFFFF">
    <p>Début
    </p>
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[1]/album[1]/regroupement" />
    <p>End
    </p>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="regroupement">
      <p>
        <xsl:apply-templates select="@sous_titre"/> 
        <xsl:apply-templates select="ligne"/> 
      </p>
    </xsl:template>
     
    <xsl:template match="@sous_titre">
    	* <xsl:value-of select="."/>
    </xsl:template>
     
    <xsl:template match="ligne">
    	- <xsl:value-of select="."/>
    </xsl:template>
     
    </xsl:stylesheet>

  6. #6
    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
    Pour expliquer un peu, par défaut si tu ne définis pas de template pour l'élément racine (match="/"), c'est comme s'il y avait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
       <xsl:apply-templates />
    </xsl:template>
    C'est a dire : applique toutes les règles que tu peux sur le xml existant.
    Donc, par exemple tous les élements du xml validant match="@sous_titre" exécutait le template correspondant.

    Là en écrasant le template racine, on dit : exécute moi juste les règles pour l'élément enregistrements/audios/enseignements/auteur[1]/album[1]/regroupement

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Merci, Morbo, pour la clarté de tes explications...
    Du coup, j'ai enfin compris pourquoi ça ne pouvait pas y faire, avant la modif !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] apply-templates comment elle fonctionne ?
    Par zemzoum89 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 21/10/2010, 10h31
  2. Réponses: 1
    Dernier message: 15/05/2007, 10h19
  3. [XPath] cibler les noeuds avec apply-templates
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/01/2007, 14h34
  4. [XPath] Apply-templates sur des balises de type pwet:test
    Par BiM dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/09/2006, 15h17
  5. [debutant]Comment faire un espace entre 2 apply-templates?
    Par Jayceblaster dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 25/04/2006, 19h47

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