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 :

[XSL] template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut [XSL] template
    J'ai un fichier XSL ds lequel j'ajoute à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="//item">	
    	<span style="font-family:times"><xsl:value-of select="."/></span>
    </xsl:template>
    L'élément item est repris à plusieurs endroits du code dans d'autres éléments ayant chacun leur propre style. J'aurais voulu appliquer un certain style à tous les éléments item rencontrés dans le fichier XML.

    Le pb est que le code ajouté à la fin ne se répercute pas.
    Comment faire?

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    exemple?

    la ton template prend absoluement tous les <item/> de ton doc et met une balise span autour
    sinon je n arrive pas a comprendre le probleme
    met un exemple stp

  3. #3
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    Voici 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
     
    <xsl:template match="/">
    	<html>
    	<head>
    		<style type="text/css">
    			.style_body {font-family:Verdana, Arial, Helvetica, sans serif; font-size:10pt}
    			.style_conteneur {position:absolute; width:750px; height:auto; background:#B98CCC; left:50%}
    			.style_haut {height:75px; font-size:30px; color:#FFCC99; font-weight:bold}
    			.style_gauche {position:absolute; left:0; width:150px; padding-test:1px}
    			.style_droite {margin-left:150px; padding-top:10px; padding-left:10px; padding-right:10px}
    		</style>
    	</head>
    	<body class="style_body">
    		<xsl:apply-templates select="racine/conteneur"/>		
    	</body>
    	</html>
    </xsl:template>
     
    <xsl:template match="conteneur">
    	<div class="style_conteneur">
    		<xsl:apply-templates select="haut"/>
    		<xsl:apply-templates select="gauche"/>
    		<xsl:apply-templates select="droite"/>
    		<xsl:apply-templates select="bas"/>
    	</div>
    </xsl:template>
     
    <xsl:template match="haut">
    	<div class="style_haut">
    		<xsl:value-of select="."/>
    	</div>
    </xsl:template>
     
    <xsl:template match="gauche">
    	<div class="style_gauche">
    		<xsl:apply-templates select="menu"/>
    	</div>
    </xsl:template>
     
    <xsl:template match="menu">
    	<ul style="list-style-type:none; font-size:11px; margin:0; padding:0">
    		<xsl:for-each select="*">
    			<li><xsl:value-of select="."/></li>
    		</xsl:for-each>		
    	</ul>	
    </xsl:template>
     
    <xsl:template match="droite">
    	<div class="style_droite">
    		<xsl:value-of select="."/>
    	</div>
    </xsl:template>
     
     
    <xsl:template match="bas">
    	<div style="height:30px; background:#456BBB; font-size:12px">
    		<xsl:apply-templates select="bas_droite"/>
    		<xsl:apply-templates select="bas_gauche"/>
    	</div>
    </xsl:template>
     
    <xsl:template match="bas_droite">
    	<div style="float:right; text-align:right">
    		<xsl:value-of select="."/>
    	</div>
    </xsl:template>
     
    <xsl:template match="bas_gauche">
    	<xsl:for-each select="item">
    		<div><xsl:value-of select="."/></div>
    	</xsl:for-each>	
    </xsl:template>
     
    <xsl:template match="//item">	
    		<span style="font-family:times"><xsl:value-of select="."/></span>
    	</xsl:template>
     
    </xsl:stylesheet>
    Le dernier template qui reprend tous les éléments item n'est apparemment pas pris en considération.
    Peut-être que je m'y prends mal.

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    je ne sais pas ou se trouvent tes elements item mais étant donné que tu appelles toujours tes templates en sélectionnant des objets ou des noms de templates, tu ne risques pas de déclencher celui la.
    écrit <xsl:apply-templates> dans chacun de tes templates ou dans ton template principal...

  5. #5
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    Voilà 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml:stylesheet type="text/xsl" href="style02.xsl"?>
    <racine>
    	<conteneur>
    		<haut><item>Souvenirs, souvenirs...</item></haut>
    		<gauche>
    			<menu>
    				<item>acceuil</item>
    				<image>separateur</image>
    				<item>Fête de la musique 2003</item>
    				<item>Fête de la musique 2005</item>
    				<item>Rando à Sassenage</item>
    				<item>Rando à Domène</item>
    				<image>separateur</image>
    				<item>Liens</item>
    			</menu>
    		</gauche>
    		<droite>
    			<item>Bienvenue sur mon site...</item>
    		</droite>
    		<bas>
    			<bas_gauche>
    				<item>Mise à jour: 15/07/2005</item>
    				<item>Crée le: 26/06/2005</item>
    			</bas_gauche>
    			<bas_droite><item>Liens</item></bas_droite>
    		</bas>
    	</conteneur>
     
    </racine>
    J'ai rajouté <xls:apply-templates select="/"/>
    dans le template principal mais ça ne change pas les éléments item.

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    <xls:apply-templates/>

  7. #7
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    J'avais essayé, il m'indique une erreur.
    "reference to undeclared namespace prefix: 'xsl'"

  8. #8
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    pardon c
    <xsl:apply-templates/>
    et non pas xls

    au pire... <xsl:apply-templates select="*"/>
    mais bon je suppose que c est beaucoup moins précis

  9. #9
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    En fait, j'avais déjà essayé plus tôt mais ça n'avait pas marché, ni avec l'étoile.

  10. #10
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    as tu un exemple de xml?
    histoire de savoir "où" appeler le template

  11. #11
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    J'ai mis le fichier XML dans un post précédent! C'est celui de 13:03.
    On peut voir que l'élément item est repris plusieurs fois dans les éléments menu, droite et bas_gauche.

    Peut-être que mon fichier XML est mal construit? J'ai vu un exemple dans un post où on passe la description de l'élément comme attribut.

    J'aimerais voir d'autres exemples de menu ou de page d'accueil en XML et formaté en XSL mais j'en pas trouvé sur le net.

  12. #12
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    ok,
    pour appeler le template qui prend les item en compte il faut l appeler là où il y a des éléments item justement.
    Dans ton cas par exemple comme dans ton element bas_gauche tu as des elements item alors tu devras faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:template match="bas_gauche">
       <!--si tu veux un div par item-->
       <xsl:for-each select="item">
         <xsl:apply-templates select="."/>
       </xsl:for-each>
    </xsl:template>
    dans le cas d un seul div (ou alors tu mets le div dans le template dédié a item
    <xsl:template match="bas_gauche">
    <!--il n y a que des item donc..-->
    <xsl:apply-templates/>
    </xsl:template>

  13. #13
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    Ok, merci.
    C'est bien ce que je pensais.
    Alors le code XSL n'est pas si simple que j'aurais cru au départ.
    J'avais une feuille de style CSS et qq fichiers HTML.
    Il était alors facile de formater tous les <H1>, <H2>, ..., ainsi que les liens hypertextes <a> en donnant le format une fois pour toute dans la feuille CSS.

    Dans une feuille XSL, apparement, il faut refaire le style de l'hypertexte tous le long de la feuille.

    A moins qu'il y ait un moyen plus simple?

  14. #14
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    à partir du moment ou tu peux factoriser ton cide, il vaut mieu le factoriser.
    Passer par une css pour formater la présentation d un objet vaut largement mieu que d avoir un process de transformation XSL pour générer des styles inline, surtout que ça alourdi considérablement la taille de ton html final.


  15. #15
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    A terme, c'est le XHTML et donc le XML+XSL qui sera le format de référence pour produire des sites?
    Si bien qu'il vaut mieux passer par ce genre de format, non?
    Pourquoi rester en CSS? J'ai vu qu'il y avait des avantages considérables de passer en XML+XSL. Outre de pouvoir structurer l'information et le faire visualiser sous différents formats, j'ai vaguement vu qu'on pouvait créer des feuilles dynamique liées à des bases de données. Je pense que ça en vaut la peine, non? En tout cas, je vais essayer de voir que ça donne, je ne suis qu'au début. Peut-être faudra-t-il mettre plus de temps pour créer une nouvelle feuille XSL mais je veux en être sûr avant de donner un avis définitif.

  16. #16
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Généralement, la combinaison gagnante est : XML + XSLT = XHTML + CSS

    La transformation XSLT donne un rendu de la structure (organisation) générale de la page XHTML, et une feuille de style CSS donne la mise en forme particulière de chaque élément de la structure (DIV, TABLE, P, H1..H5, etc.), sachant que dans l'absolu le CSS peut être généré lui-même par une transformation XSLT...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  17. #17
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    le processeur ne va pas se plaindre s il n y a pas de noeud root dans le doc finale? (css je parle)

  18. #18
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par tiscars
    le processeur ne va pas se plaindre s il n y a pas de noeud root dans le doc finale? (css je parle)
    Non, pas si tu lui précises que le résultat de la transformation est du texte non parsable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="text"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  19. #19
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Par défaut
    Généralement, la combinaison gagnante est : XML + XSLT = XHTML + CSS
    C'est intéressant ce que tu dis Grandfather. En effet, si on s'occupe de la structure dans les fichiers XML et d'une mise en forme primaire dans un fichier XSL puis d'une mise forme plus fine dans une feuille de style CSS, ça pourrait donner de meilleurs résultats de gestion.
    Mais, je n'ai vu aucun tuto sur cette combinaison. Y'a-t-il des documents là-dessus?

    D'autre part, je n'ai pas encore fait de transformation XSLT. Je regarde juste le résultat du fichier XML sur IE. A terme, j'envisage d'utiliser un bout de code PHP pour faire directement la transformation. Ou peut-être qu'il existe une autre méthode. Dans un autre post, j'ai vu qu'il y avait une FAQ mais je ne vois pas comment l'utiliser. Admettons que je possède ces fichiers XHTML. Pour réaliser une feuille CSS, je fais comme si j'avais un HTML?

Discussions similaires

  1. [XSL]<xsl:template match> path
    Par *alexandre* dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 19/07/2007, 13h24
  2. [XSLT] Source du xsl:template parent
    Par aDamas dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/06/2007, 17h16
  3. [XSL][Templates]Du texte sur une page déterminée?
    Par cackybis dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/06/2006, 09h58
  4. [XSL] <xsl:template mode="a reutiliser"/>
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/02/2006, 16h12
  5. xsl:Template sur un élément sans namespace
    Par dust45 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/10/2005, 16h52

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