Bonsoir!
Dans le cadre d'un projet scolaire sympathique (en quelques mots création d'interfaces web au moyen de Glade-2, logique métier en PHP), je me trouve devant un problème que je trouve assez tordu.
Le format GladeML ne respecte pas franchement les paradigmes de XML (quasiment pas de hierarchisation). J'ai unse structure que je pourrais illustrer comme ceci:
Cette structure représente ce que l'on pourrait appeler une JTable en java, ou encore une listbox en RB, enfin bref, un composant graphique qui me servira à représenter le contenu d'une table d'un SGBD quelconque. Evidemment, le format étant vraiment archi-mauvais, vous constatez qu'il n'y aucune hierarchie. Je veux représenter cela sous la forme d'un tableau html de la forme suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <widget class="GtkCList" id="clist1"> ... <property name="n_columns">3</property> ... <child>titre1</child> <child>titre2</child> <child>titre3</child> <child>cellule11</child> <child>cellule12</child> <child>cellule13</child> <child>cellule21</child> <child>cellule22</child> <child>cellule23</child> ... </widget>
Au passage, désolé de surdocumenter une question qui tiendrait sans doute en 3 lignes, mais mieux vaut trop d'informations que pas assez!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <table> <tr> <td>titre1</td><td>titre2</td><td>titre3</td> </tr> <tr> <td>cellule11</td><td>cellule12</td><td>cellule13</td> </tr> <tr> <td>cellule21</td><td>cellule22</td><td>cellule23</td> </tr> </table>
Après de multiples essais, voilà la transformation XSL que j'applique:
J'ai donc été obligé de réaliser une boucle for récursive. Le problème tient au passage de paramètres. En effet, visiblement, le passage du noeud courant ne prend pas (dans la feuille ci-dessus, il s'appelle "node").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 <xsl:template match="glade:widget[@class='GtkCList']"> <xsl:variable name="numcols"> <xsl:value-of select="glade:property[@name='n_columns']"/> </xsl:variable> <table> <xsl:attribute name="class"> <xsl:text>GtkCList</xsl:text> </xsl:attribute> <xsl:attribute name="id"> <xsl:value-of select="@id"/> </xsl:attribute> <xsl:call-template name="forColumn"> <xsl:with-param name="min"> <xsl:text>0</xsl:text> </xsl:with-param> <xsl:with-param name="max"> <xsl:value-of select="ceiling(count(glade:child) div $numcols)"/> </xsl:with-param> <xsl:with-param name="step"> <xsl:value-of select="$numcols"/> </xsl:with-param> <xsl:with-param name="nodes" select="current()"/> </xsl:call-template> </table> </xsl:template> <xsl:template name="forColumn"> <xsl:param name="min"/> <xsl:param name="max"/> <xsl:param name="step"/> <xsl:param name="nodes"/> noeuds: <xsl:value-of select="nodes"/>... <tr> <xsl:for-each select="nodes/glade:child[(position() >= $min) and (position() < ($min+$step))]"> <td> <xsl:apply-templates/> </td> </xsl:for-each> </tr> <xsl:if test="number($min) < number($max - 1)"> <xsl:call-template name="forColumn"> <xsl:with-param name="min"> <xsl:value-of select="$min + step"/> </xsl:with-param> <xsl:with-param name="max"> <xsl:value-of select="$max"/> </xsl:with-param> <xsl:with-param name="step"> <xsl:value-of select="$step"/> </xsl:with-param> <xsl:with-param name="nodes"> <xsl:value-of select="$nodes"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template>
J'ai essayé en passant "." également.
le top du top serait de simplement référencer une liste de noeuds <child>, mais je vois pas trop comment...
je vous montre juste le résultat html:
merci mille fois d'avance pour toute l'aide que vous pourrez m'apporter!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <table class="GtkCList" id="clist1"> noeuds: ... <tr></tr> </table>
Greg[/code]
Partager