Résolution
L'une des premières choses à remarquer est la modification
de l'ordre des entrées.
En XML:
<colonne
nom="col1">
<entree>entrée col1_1</entree>
<entree>entrée col1_2</entree>
<entree>entrée col1_3</entree>
</colonne>
En HTML, du fait de la manière dont sont construits les
tableaux:
<tr>
<td>entrée col1_1</td>
<td>entrée col2_1</td>
<td>entrée col3_1</td>
</tr>
Autre aspect
très important: le nombre d'entrées n'est pas égal
dans chaque colonne, ce qui oblige, en HTML, à créer
des entrées vides (ou, plus précisément, avec
un espace, Netscape - par exemple - n'appréciant pas vraiment
les cellules vides).
Voici notre
document XSLT, suivi de nos explications:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template
match="doc">
<table>
<tr>
<xsl:apply-templates
select="colonne"/>
</tr>
<xsl:call-template
name="compteur">
<xsl:with-param
name="N" select="1"/>
</xsl:call-template>
</table>
</xsl:template>
Ce template
principal fait appel à la fonction suivante:
<xsl:template
name="compteur">
<xsl:param
name="N" />
<xsl:if
test="colonne/entree[ $N ]">
<tr>
<xsl:for-each
select="colonne">
<td>
<xsl:apply-templates
select="entree[ $N ]"/>
<xsl:text>
</xsl:text>
</td>
</xsl:for-each>
</tr>
<xsl:call-template
name="compteur">
<xsl:with-param
name="N" select="$N + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Ainsi qu'à cette fonction qui produit les en-têtes
de colonnes:
<xsl:template
match="colonne">
<th>
<xsl:value-of
select="@nom"/>
</th>
</xsl:template>
</xsl:stylesheet>
Le tout se trouve
dans un seul et même fichier XSL.
Page 1 | 2 | 3
|