Bonjour!

Je tente de transformer un fichier xml en un autre pour l'adapter à un datagrid. Le but est de découpler toute l'arborescence pour passer de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<tree>
  <batiment libelle="toto1">
     <etage ibelle="toto2">
        <zone ibelle="toto3" />
     </etage>
  </batiment>
</tree>
à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
<tree>
   <row batiment="toto1" etage="toto2" zone="toto3" />
<tree>
Mon format de départ est le 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
 
 
<?xml version="1.0" encoding="utf-8" ?>
<tree>
  <batiment id="1" libelle="batiment1">
    <etage id="1" libelle="etage1">
      <zone id="1" libelle="zone1" />
      <zone id="2" libelle="zone2" />
      <zone id="3" libelle="zone3" />
    </etage>
    <etage id="2" libelle="etage2">
      <zone id="1" libelle="zone1" />
      <zone id="2" libelle="zone2" />
      <zone id="3" libelle="zone3" />
    </etage>
  </batiment>
  <batiment id="2" libelle="batiment2">
    <etage id="1" libelle="etage1">
      <zone id="1" libelle="zone1" />
      <zone id="2" libelle="zone2" />
      <zone id="3" libelle="zone3" />
    </etage>
    <etage id="2" libelle="etage2">
      <zone id="1" libelle="zone1" />
      <zone id="2" libelle="zone2" />
      <zone id="3" libelle="zone3" />
    </etage>
  </batiment>
  <batiment id="3" libelle="batiment3">
    <etage id="1" libelle="etage1">
      <zone id="1" libelle="zone1" />
      <zone id="2" libelle="zone2" />
      <zone id="1" libelle="zone3" />
    </etage>
  </batiment>
</tree>
Mon fichier xsl :

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
 
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:strip-space elements="batiment" />
  <xsl:strip-space elements="etage" />
  <xsl:strip-space elements="zone" />
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="tree">
    <xsl:element name="tree">
      <xsl:for-each select="batiment">
        <xsl:for-each select="etage">
          <xsl:for-each select="zone">
            <xsl:element name="row">
              <xsl:attribute name="batiment">
                <xsl:value-of select="ancestor::batiment[@libelle]" />
              </xsl:attribute>
              <xsl:attribute name="etage">
                <xsl:value-of select="ancestor::etage[@libelle]" />
              </xsl:attribute>
              <xsl:attribute name="zone">
                <xsl:value-of select="descendant-or-self::zone[@libelle]" />
              </xsl:attribute>
            </xsl:element>
          </xsl:for-each>
        </xsl:for-each>
      </xsl:for-each>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
mon résultat m'affiche bien le format voulu mais les attributs sont vides ....

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
 
<?xml version="1.0" encoding="utf-8"?>
<tree>
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
  <row batiment="" etage="" zone="" />
</tree>
Auriez vous une idée du pourquoi ?

Merci d'avance pour vos réponses.

Mamat.