bonjour,

J'ai un fichier XML que j'aimerais transformer dans un autre XML
Chaque noeud "<MENU>" est à transformer en noeud dont le nom dépend de l'attribut "tid" de "<MENU>".

le premier fichier XML à tranformer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<MENUS>
	<MENU id="704" nom="Offre" page="3398_offre" tid="2" texte="rubrique coutier">
		<MENU id="719" nom="Locataire" page="3337_Loc" tid="2.1" texte="" />
		<MENU id="705" nom="Notre Expertise" page="3376_Expert" tid="2.2" texte="type de texte de Courtage_0">
			<MENU id="782" nom="Exemple Expertise" page="" tid="2.2.0" texte="" />
		</MENU>	
	</MENU>
</MENUS>
fichier résultant (normalement) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-16"?>
<XML>
<root>
	<a2 html="Offre" img="Folder.gif"  exp="True"
		<a2_1 html="Locataire" img="Folder.gif"  exp="True" />
		<a2_2 html="Notre Expertise" img="Folder.gif"  exp="True" 
			<a2_2_0 html="Exemple Expertise" img="Folder.gif"  exp="True" />
		</a2_2>
	</a2>
	</root>
</XML>
voici mon code XSLT :
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">
	<xsl:output method="xml" indent="yes" />
	<!--  NOEUD RACINE -->
	<xsl:template match="MENUS">
		<XML>
			<root>
				<xsl:apply-templates select="MENU" />
			</root>
		</XML>
	</xsl:template>
	<!-- MENU -->
	<xsl:template match="MENU">
			<xsl:param name="nomborne" select='concat("a",translate(@tid,".","_"))' />
			<xsl:text disable-output-escaping="yes">&lt;</xsl:text>
				<xsl:value-of select="$nomborne" />
			<xsl:text disable-output-escaping="yes">&gt;</xsl:text>
 
			<xsl:attribute name="html"><xsl:value-of select="@nom" /></xsl:attribute>
			<xsl:attribute name="img">Folder.gif</xsl:attribute>
			<xsl:attribute name="exp">True</xsl:attribute>
 
			<xsl:if test="MENU">
				<xsl:apply-templates select="MENU" />
			</xsl:if>
 
			<xsl:text disable-output-escaping="yes">&lt;/</xsl:text>
			<xsl:value-of select="$nomborne" />
			<xsl:text disable-output-escaping="yes">&gt;</xsl:text>
	</xsl:template>
</xsl:stylesheet>
Le malin me ressort les bons noms de noeuds (<a2 etc...) mais sans les attributs. on dirait qu'il ne prend pas mes noms de noeuds que je génère (suivant l'attribut tid du premier XML) comme étant des noeuds.

Comment est ce possible ?


EDIT : Voila mon fichier résultant avec le code précédent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<?xml version="1.0" encoding="UTF-16"?>
<XML>
<root><a2><a2_1></a2_1><a2_2><a2_2_0></a2_2_0></a2_2></a2></root>
</XML>