Ben c'est pas très compliqué, faut juste comprendre ce qui foire et avoir des idées.
Là typiquement, ton doc XSL est pas valide parce qu'il est pas XML-compliant, j'en veux pour preuve ceci :
Code :
- <xsl:if test="position() mod 2 = 1"><tr></xsl:if>
|
l'élément <tr> n'est pas fermé et c'est pareil plus loin. Tu as déjà de la chance d'avoir un résultat (quoique ça n'aide pas à voir l'erreur)
Donc l'idée c'est que puisque tu vas être obligé de traiter 2 groupes <td> à la fois, il faut aller chercher le suivant, sous condition, avec XQuery/XPath. Au passage j'utilise un paramètre pour mémoriser la position actuelle.
Regardes mon exemple
test.xml
Code :
- <?xml version="1.0"?>
- <root>
- <el>yop1</el>
- <el>yop2</el>
- <el>yop3</el>
- <el>yop4</el>
- <el>yop5</el>
- <el>yop6</el>
- <el>yop7</el>
- </root>
|
test.xsl
Code :
- <?xml version="1.0" encoding="ISO-8859-15"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
- <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" media-type="te
- xt/html" indent="yes" />
- <xsl:template match="root">
- <html>
- <head>
- <title>Test XSL</title>
- <link rel="stylesheet" type="text/css" href="style.css" />
- </head>
- <body>
- <table>
- <xsl:apply-templates select="el" />
- </table>
- </body>
- </html>
- </xsl:template>
- <xsl:template match="el">
- <xsl:if test="position() mod 2 = 1">
- <tr>
- <td><xsl:value-of select="." /></td>
- <xsl:if test="position() = last()"><td> </td></xsl:if>
- <xsl:if test="position() != last()">
- <xsl:param name="pos" select="position() + 1" />
- <td>
- <xsl:value-of select="../el[position() = $pos]" />
- </td>
- </xsl:if>
- </tr>
- </xsl:if>
- </xsl:template>
- </xsl:stylesheet>
|
au fait " " n'est pas une entité XSL-T valide, il faut utiliser "Ũ". C'est moche mais les entités XHTML ne sont pas connues par XSL-T, je crois qu'il y a un moyen de les importer mais je sais plus comment.
---------------
The Rom's, à votre service