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 :

Produire du CSS interne [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Produire du CSS interne
    Bonjour à tous,
    Mon problème est le suivant : j'ai tout un tas de fichiers xhtml qui ressemblent à ç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
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="style.xsl" type="text/xsl"?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html">
        <head>
            <title>Titre de la page</title>
        </head>
        <body>
            <fen>Agent</fen>
            <fen>Cause</fen>
            <fen>Agent</fen>
        </body>
    </html>
    Et j'aimerais, avec l'aide d'un fichier xsl, faire qu'en sortie on ait les "Agent" qui soient de la même couleur, et que "Cause" soit d'une autre couleur.

    Le problème : ça ne sera pas toujours "Agent" et "Cause" ! Les balises sont toujours <fen>, mais à l'intérieur la valeur textuelle change : <fen>Truc</fen>, <fen>Machin</fen> par exemple.


    Je donne mes idées pour l'instant : j'ai fait un fichier xsl qui ajoute aux balises <fen> une classe correspondant à leur valeur textuelle. De cette façon, j'obtiens du <fen class="Agent"> par exemple. Et ensuite mon idée c'est de mettre du CSS interne en créant une balise <style> qui s'applique à l'élément juste créé. Ça marche presque, mais j'arrive pas à trouver un moyen de mettre des couleurs différentes...

    Mon fichier xsl (il n'y a rien après "Color :" parce que je sais pas quoi mettre) :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0"
                    xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:xhtml="http://www.w3.org/1999/xhtml"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:h="http://java.sun.com/jsf/html"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
        <xsl:output method="html"/>
     
        <xsl:template match="xhtml:body">
            <xsl:for-each select="xhtml:fen">
                <xsl:call-template name="classMaker"/>
            </xsl:for-each>
        </xsl:template>
     
        <xsl:template match="xhtml:head">
            <h:head>
                <title>Titre du document-test modifié par xsl</title>
                <link href="stylesheet.css" rel="stylesheet" media="all" type="text/css"/>
            </h:head>
        </xsl:template>
     
        <xsl:template name="classMaker">
            <h1 class="{string(.)}">           
                <xsl:apply-templates/>
            </h1>
            <xsl:value-of select="/html/body/co"/>
            <style type="text/css">
                .<xsl:apply-templates/>{Color : ;}
            </style>
        </xsl:template>
     
    </xsl:stylesheet>
    C'est un peu sale j'en conviens, mais si on a du xhtml comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h1 class="Agent">Agent</h1>
    <style type="text/css">.Agent{Color:blue;}</style>
    <h1 class="Cause">Cause</h1>
    <style type="text/css">.Cause{Color:white;}</style>
    <h1 class="Agent">Agent</h1>
    <style type="text/css">.Agent{Color:red;}</style>
    Les deux "Agent" seront rouges.

    Merci d'avance pour votre aide, je bloque depuis quelques jours sur ce problème...

  2. #2
    Futur Membre du Club
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai posté le message précédent après 2 jours de recherche, mais j'ai trouvé comment faire peu après (Murphy ?). Mon code est un peu sale, donc si vous avez des idées ça peut toujours être chouette. Mais je vais quand même mettre "résolu"

    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
            <style type="text/css">
                .<xsl:apply-templates/>{Color :
                 <xsl:if test="position()=1">
                     <xsl:text>red</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=2">
                     <xsl:text>blue</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=3">
                     <xsl:text>green</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=4">
                     <xsl:text>purple</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=5">
                     <xsl:text>aqua</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=6">
                     <xsl:text>lime</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=7">
                     <xsl:text>maroon</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=8">
                     <xsl:text>silver</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=9">
                     <xsl:text>olive</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=10">
                     <xsl:text>teal</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=11">
                     <xsl:text>fuchsia</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=12">
                     <xsl:text>crimson</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=13">
                     <xsl:text>darksalmon</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=14">
                     <xsl:text>orangered</xsl:text>
                 </xsl:if>
                 <xsl:if test="position()=15">
                     <xsl:text>mediumspringgreen</xsl:text>
                 </xsl:if> ;}
            </style>

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

Discussions similaires

  1. [CSS] marge interne dans des div imbriqués
    Par Stitchover dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 26/04/2006, 15h23
  2. [CSS] @import et regles internes
    Par guy2004 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/10/2005, 13h54
  3. .css
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 25/04/2003, 15h34

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