Bonjour à tous,

Soit le genre de XML suivant
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
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="file-xsl.xsl"?>
<root>
  <ligne>
    <nom>DUPOND</nom>
    <prenom>Jeanne</prenom>
    <date>01/01/2001</date>
    <adresse>
      <num>125</num>
      <lib>Rue de la république</lib>
      <ville>Paris</ville>
    </adresse>
    <enfants>
      <enfant>
        <nom>DUPOND</nom>
        <prenom>Bob</prenom>
      </enfant>
      <enfant>
        <nom>DUPOND</nom>
        <prenom>Rose</prenom>
      </enfant>
    </enfants>
  </ligne>
  <ligne>
    <nom>DURAND</nom>
    <prenom>Roberta</prenom>
    <date>01/01/2001</date>
    <adresse>
      <num></num>
      <lib></lib>
      <ville></ville>
    </adresse>
    <enfants>
      <enfant>
        <nom>DURAND</nom>
        <prenom>Jean</prenom>
      </enfant>
    </enfants>
  </ligne>
</root>
que j'aimerais transformer en tableau html sous la forme

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
 
<table>
 <tr>
   <td>DUPOND</td>
   <td>Jeanne</td>
   <td>01/01/2001</td>
   <td>125</td>
   <td>Rue de la république</td>
   <td>Paris</td>
   <td>
     <table>
      <tr>
        <td>DUPOND</td>
        <td>Bob</td>
      </tr>
      <tr>
        <td>DUPOND</td>
        <td>Rose</td>
      </tr>
     </table>
   </td>
 </tr>
 <tr>
   <td>DURAND</td>
   <td>Roberta</td>
   <td>01/01/2001</td>
   <td></td>
   <td></td>
   <td></td>
   <td>
     <table>
      <tr>
        <td>DURAND</td>
        <td>Jean</td>
      </tr>
     </table>
   </td>
 </tr>
<table>
J'ai codé ce XSL suivant, mais mon soucis serait d'arriver à différencier les noeuds <adresse> et <enfants>. Je les code de la même manière, et donc mon résultat html est faussé puisque je créé une nouvelle ligne pour chaque noeud enfant du noeud adresse.

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
 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
 
  <!-- Template colonne -->
  <xsl:template name="colonne">
    <xsl:if test="count(*) &gt;= 1">
      <td>
      <table border="1">
      <xsl:for-each select="*">
        <tr>
          <xsl:call-template name="colonne"/>
        </tr>
      </xsl:for-each>
      </table>
      </td>     
    </xsl:if>
    <xsl:if test="count(*) = 0">
      <td><xsl:value-of select="."/></td>
    </xsl:if>
  </xsl:template>
  <!-- Fin Template colonne -->
 
  <xsl:template match="root">
  <table border="1">
 
    <!-- Pour Chaque ligne -->
    <xsl:for-each select="*">
      <tr>
      <!-- Colorer une ligne sur 2 -->
      <xsl:if test="(position() mod 2)=0">
        <xsl:attribute name="bgcolor">green</xsl:attribute>
      </xsl:if>
 
      <!-- Pour chaque colonne -->
      <xsl:for-each select="*">
        <xsl:call-template name="colonne"/>
      </xsl:for-each>
      </tr>
    </xsl:for-each>
 
  </table>
  </xsl:template>
 
</xsl:stylesheet>
C'est pas aisé pour un newbie comme moi , sachant que ma XSL doit être générique, puisque mon XML peut être structuré différemment.

Merci de votre aide.