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 :

probleme template me renvoi qq chose en trop


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut probleme template me renvoi qq chose en trop
    bonjour, voici un ex de fichier XML que je traite

    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
    <Test>
    	<Title>Titre</Title>
    	<Sub-section>
    		<Title>1er niveau sub-section</Title>
    		<Sub-section>
    			<Title>2eme niveau sub-section</Title>
    			<Sub-section>
    				<Title>3eme niveau sub-section</Title>
    				<Sub-section>
    					<Title>4eme niveau sub-section</Title>
    					<Sub-section>
    						<Title>5eme niveau sub-section</Title>
    						<Sub-section>
    							<Title>6eme niveau sub-section</Title>
    						</Sub-section>
    						<Sub-section>
    							<Title>6eme niveau sub-section 2 eme partie</Title>
    						</Sub-section>
    					</Sub-section>
    				</Sub-section>
    			</Sub-section>
    		</Sub-section>
    		<Sub-section>
    			<Title>2eme niveau sub-section 2eme partie</Title>
    		</Sub-section>
    	</Sub-section>
    </Test>
    G ecrit un XSL qui doit m afficher entre autres le nbre de parents Sub-section de ma Sub-section courante:

    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    	<xsl:template match="/">
    		<xsl:apply-templates select="//Sub-section[1]"/>
    	</xsl:template>
     
     
    	<xsl:template match="Sub-section">
    		-------------------------------------------------------------<br/>
    		NomBalise: <xsl:value-of select="name()"/><br/>
    		Niveau : <xsl:value-of select="count(ancestor::Sub-section)"/><br/>
    		Title : <xsl:value-of select="Title"/><br/>
    		-------------------------------------------------------------
    		<br/><br/>
    		<xsl:apply-templates select="*"/>
    	</xsl:template>
    </xsl:stylesheet>


    il me renvoi une liste de ce genre
    1er niveau sub-section -------------------------------------------------------------
    NomBalise: Sub-section
    Niveau : 1
    Title : 2eme niveau sub-section
    -------------------------------------------------------------
    sauf le premier qui est bien fait
    ce que je ne comprend pas c pourquoi ce texte en gras est affiché alors qu il n a rien a faire la?

    merci pour vos lumieres

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Quand tu fais un <xsl:apply-templates select="*"/>, tous les éléments fils du <Sub-section> courant sont sélectionnés, y compris les éléments <Title>. Comme tu n'as pas écrit de template pour gérer les <Title>, c'est le template par défaut qui les traite. Le template par défaut des noeuds textuels se contentant d'envoyer le contenu de l'élément en sortie, le contenu de <Title> s'affiche. Il y a deux façons simples de résoudre ce problème :

    1) Ne traiter explicitement que les <Sub-section> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          ...
          <br/><br/> 
          <xsl:apply-templates select="Sub-section"/> 
       </xsl:template>
    2) Ajouter un template vide pour les <Title> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="Title" />

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Grand Father merci beaucoup, en plus ct evident

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    juste une petite précision que je ne saisi pas.
    Tu m as dit que qd je fais un select = *, c le template par defaut qui prend les noeuds...

    mais si je met un template du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="*">
    		<xsl:apply-templates/>
    	</xsl:template>
    le Sub-section devrait aller ds le template match="Sub-section"
    puis le Apply-templates devrait logiquement envoyer mon Title ds le telate général...

    Mais c pas le cas...



    si tu veux, pour les deux solutions que tu m as proposé,
    1/ je ne suis pas sur que le fils direct soit un Sub-section
    2/ il n y a pas que tes Title

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par Triangle
    le Sub-section devrait aller ds le template match="Sub-section"
    puis le Apply-templates devrait logiquement envoyer mon Title ds le telate général...

    Mais c pas le cas...
    Si si, c'est bien ce qui se passe. Mais il ne faut pas oublier que le <xsl:apply-templates/> applique les templates non seulement sur les éléments, mais également sur les noeuds text(). Or, le template par défaut des noeuds text() est celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="@*|text()"> 
     <xsl:value-of select="."/> 
    </xsl:template>
    C'est pour cela que le contenu de tes balises <Title>, c'est à dire les noeuds text() fils de <Title>, se retrouvent en sortie.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    merci

Discussions similaires

  1. probleme d'affichage (renvoie d'argument) SVP
    Par sky88 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 25/03/2008, 15h22
  2. probleme template hash_map
    Par rolphbrua dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 23h18
  3. vérification que l'url renvoie quelque chose..
    Par Satanas_et_diabolo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2006, 21h47
  4. probleme template qcm en loadmovie
    Par serna dans le forum Flash
    Réponses: 3
    Dernier message: 05/06/2006, 22h59
  5. Probleme Template
    Par Muetdhiver dans le forum Langage
    Réponses: 11
    Dernier message: 18/04/2006, 11h00

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