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...