Je souhaiterais transformer le contenu d'un fichier xml en tableau sur plusieurs lignes, mais sans devoir spécifier la notion de début ou fin de ligne dans le fichier xml. Le problème, c'est que je ne sais pas comment faire pour ajouter les <tr> et </tr> pour changer de ligne.

Un petit exemple sera peut-être plus simple, voici un fichier xml :
<sections nbresectionparligne="2">
  <section>Section1</section>
  <section>Section2</section>
  <section>Section3</section>
  <section>Section4</section>
  <section>Section5</section>
  <section>Section6</section>
</sections>


Que je voudrais transformer pour obtenir un résultat égal à ceci :
<table>
  <tr>
    <td>Section1</td><td>Section2</td>
  </tr>
  <tr>
    <td>Section3</td><td>Section4</td>
  </tr>
  <tr>
    <td>Section5</td><td>Section6</td>
  </tr>
</table>


Mon début de fichier XSLT est le suivant :
<xsl:template match="/">
  <table>
    <tr>
      <xsl:for-each select="sections/section">
        <td>
          <xsl:value-of select="." />
        </td>
      </xsl:for-each>
    </tr>
  </table>
</xsl:template>

Là ça me permet d'ajouter toutes les entrées "section" comme nouvelle colone, ce que je voudrais, c'est maintenant changer de ligne toutes les "nbresectionparligne" colone.
Donc il faudrait que je puisse faire un truc du style :

  <xsl:if test="position() mod ({sections/@nbresectionparligne} + 1) = 0">
    </tr><tr>
  </xsl:if>

juste après le début de la boucle, le problème c'est que ce n'est pas possible, vu que l'arbre XML n'est alors plus valide.

Comment puis-je résoudre mon problème ?
a écrit :



  <xsl:if test="position() mod ({sections/@nbresectionparligne} + 1) = 0">
    </tr><tr>
  </xsl:if>

juste après le début de la boucle, le problème c'est que ce n'est pas possible, vu que l'arbre XML n'est alors plus valide.

Comment puis-je résoudre mon problème ?


Bonjour.

En remplaçant </tr><tr> par les entités :

& l t ; /t r & g t ;
& l t ; t r & g t ;

on obtient le résultat voulu.
Modifié par GeorgesM (27 Sep 2006 - 20:31)
Non malheureusement ça ne me donne pas le résultat voulu, car en remplaçant les balises par leurs entités html, elles ne sont pas prises en compte par le parser xml du navigateur.

En résultat, j'ai donc un certain nombre de fois les mots "</tr><tr>" affiché dans la page, mais aucune ligne n'est créée dans le tableau html...
Effectivement...

La transformation directe par le navigateur pose souvent des problèmes inextricables (de résolution d'entités, entre autre).

En utilisant php, par contre, ça marche...

Du côté client, peut-être avec javascript, mais je n'utilise pas.
je pratique côté serveur...

http://www.benoitpiette.com/labo/tutoriel-ajax.html#page11
Modifié par GeorgesM (29 Sep 2006 - 06:26)
Administrateur
Hello,

Attention GeorgesM : ton url ne fonctionne pas car elle n'a pas été rédigée selon les règles du forum (revoir celles-ci Smiley cligne )