Je me permets d'upper ce topic un peu vieux pour essayer d'apporter quelques pistes :
Pour récupérer plusieurs variables contenant chacune un type de noeuds, c'est pas dur, c'est un bête select. Ensuite, pour faire le tableau, tu peux faire un for-each sur les trsd:line-item. Dans ce for-each, je pense que si tu fais un <xsl:value-of select="position()">, tu devrais récupérer l'"index" correspondant à chaque ligne. Ensuite, c'est facile de sélectionner ce qu'il faut dans les autres variables en utilisant cet index.
Une autre façon de faire serait de récupérer les infos ligne par ligne. Un petit exemple (dont la source est de l'XHTML) auquel j'avais pensé (pas testé par contre) pour récupérer tout ce qui se trouve entre un h2 bien précis (non compris) et le suivant (compris) :
$SOTD/following::html:*[preceding::html:h2[1] is $SOTD] |
$SOTD est la variable contenant le h2 en question. Cet XPath va donc récupérer tous les noeuds de même niveau qui suivent ce $SOTD et dont le premier noeud précédent du même type que $SOTD (donc h2) est $SOTD lui-même. Ca fait que dès que dès que tu tombes sur le h2 suivant, les noeuds qui suivent auront pour premier preceding h2 ce nouvel h2, et donc ne seront plus sélectionnés.
Donc dans ton cas, je pense que tu dois pouvoir faire un truc du genre:
<xsl:for-each select="trsd:line.item">
<xsl:variable name="current_line" select="."/>
<xsl:variable name="columns" select="$current_line/following::trsd:*[preceding::trsd:line.item[1] is $current_line]"/>
<!-- mise en forme de $columns -->
</xsl:for-each>
|
A noter qu'aucune de ces deux méthodes ne me semble terrible niveau complexité :-/.
Voilà, j'espère que ça pourra t'aider, bien qu'il doive sans doute exister d'autres manières plus propres et/ou efficaces (notamment avec les apply-templates que j'ai jamais pris le temps d'apprendre, la honte).