Bonjour,
J'ai l'impression qu'il sera difficile de résoudre mon problème... mais on ne sait jamais, j'espère que quelqu'un aura des pistes pour chercher!
Résumé
En partant d'un fichier XML, j'aimerais bien obtenir un document HTML. Ce document HTML contient des tables.
Lors du traitement XSLT, si le "path" de certains éléments est répertorié dans un fichier XML annexe, j'affiche ma table dans une couleur différente.
Problème
J'aimerais que mon code contienne la déclaration de ma table une seule fois, vu que les données sont toujours les mêmes, mais je n'y arrive pas.
Explications plus complète
Tout d'abord, je convertis le path de l'élément dans le format attendu. (C'est un peu lourdingue comme traitement, mais pour l'instant je n'ai pas mieux...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part <xsl:apply-templates select="//test:element[@attr='OK']"/>
Dans le traitement, je regarde si le path de l'élément traité est référencé dans mon fichier annexe. Si c'est le cas, j'applique un tbody d'une classe différente.
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 <xsl:template match="test:element"> <xsl:variable name="chemin1"> <xsl:call-template name="string-replace-all"> <xsl:with-param name="text" select="saxon:path()" /> <xsl:with-param name="replace" select="'/'" /> <xsl:with-param name="by" select="'/test:'" /> </xsl:call-template> </xsl:variable> <xsl:variable name="chemin2"> <xsl:call-template name="string-replace-all"> <xsl:with-param name="text" select="$chemin1" /> <xsl:with-param name="replace" select="'premierelement'" /> <xsl:with-param name="by" select="'premierelement[1]'" /> </xsl:call-template> </xsl:variable>
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 <xsl:choose> <xsl:when test="document('monfichier.xml')//liste-chemins/chemin = $chemin2" > <tbody class="bienvoyant"> </xsl:when> <xsl:otherwise> <tbody class="bienterne"> </xsl:otherwise </xsl:choose> [...] longue déclaration de toute la table [...] </tbody> </xsl:template>
Les plus vigilants d'entre vous auront bien évidemment remarqué que ça, ce n'est pas de l'xml, et ça ne passera pas. Le tag "tbody" est ouvert sans être fermé à temps. Mais ça donne une idée de ce que je voudrais réaliser.
- J'avais pensé mettre les tags tbody autour de l'appel au traitement template, mais à ce moment là, je ne vois pas comment je pourrais récupérer le path de l'élément traité pour effectuer le "choose"...
- Il y a moyen de recopier la table plusieurs fois dans la condition, mais elles sont longues, et ça amènerait à doubler le code vraiment inutilement.
- J'aurais bien utilisé un paramètre pour dire aux tags html de la table de quelle classe il font partie... mais ce n'est pas possible de mettre des paramètres en HTML.
- J'ai cherché quelquechose en HTML qui dirait: "à partir d'ici, et jusque là, tu utilise ce style là", mais je n'ai pas trouvé...
Bref, je suis à court de ressources...
Merci d'avance à celui qui aura une idée de solution!
Partager