[XSLT] Rowspan vers multiples td
Bonjour,
J'ai à ma disposition des données en xml ordonnées en tableaux. Je dois proposer un document html et un document csv contenant les valeurs des tableaux et j'utilise pour cela xslt.
les tableaux sont de la forme <table><tr><td></td></tr></table> comme en html, les td peuvent porter un attribut rowspan ou colspan.
Aucun problème pour l'html, un seul pour le csv : les rowspan.
Je souhaite convertir les rowspan en autant de td dans les tr suivants à la même position que le td en cours d'analyse (peut être dans une feuille xslt intermédiaire) avant de convertir le tout en csv.
un exemple sera plus parlant :
mon tableau original :
Code:
1 2 3 4 5 6 7 8 9
|
+---+---+---+
| | 2 | 3 |
| 1 +---+---+
| | | |
+---+ 4 | 5 |
| 6 | | |
+---+---+---+ |
Mon tableau transformé (souhaité)
Code:
1 2 3 4 5 6 7 8
|
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 1 | 4 | 5 |
+---+---+---+
| 6 | 4 | 5 |
+---+---+---+ |
voici comment j'ai traité le cas beaucoup plus simple des colspan :
Code:
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
|
<xsl:template match="td">
<xsl:variable name="contenu" select="."/>
<xsl:variable name="colspan" select="@colspan"/>
<xsl:choose>
<xsl:when test="$colspan > 0">
<xsl:call-template name="Colspan">
<xsl:with-param name="nombre" select="$colspan"/>
<xsl:with-param name="compteur" select="0"/>
<xsl:with-param name="valeur" select="$contenu"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="normalize-space($contenu)" /></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="Colspan">
<xsl:param name="nombre"/>
<xsl:param name="compteur"/>
<xsl:param name="valeur"/>
<xsl:if test="$compteur < $nombre">
<td><xsl:value-of select="normalize-space($valeur)" /></td>
<xsl:call-template name="Colspan">
<xsl:with-param name="nombre" select="number($nombre)"/>
<xsl:with-param name="compteur" select="number($compteur)+1"/>
<xsl:with-param name="valeur" select="$valeur"/>
</xsl:call-template>
</xsl:if>
</xsl:template> |
Ce qui pose le + de souci étant que le nombre de lignes et de colonnes des différents tableaux n'est pas fixe et que je souhaiterais traiter ce cas d'une manière générique : n'importe quel nombre de <td rowspan="x"> par <tr> à n'importe quel endroit de ceux-ci. Il n'y a pas de règle du genre "seule la première case de la ligne peut comporter un rowspan".
J'ai essayé de m'expliquer clairement je ne sais si c'est réussi mais y a un joli dessin.
Merci pour votre aide.