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 :
fichier résultant (normalement) :
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>
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 <?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>
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.
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"><</xsl:text> <xsl:value-of select="$nomborne" /> <xsl:text disable-output-escaping="yes">></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"></</xsl:text> <xsl:value-of select="$nomborne" /> <xsl:text disable-output-escaping="yes">></xsl:text> </xsl:template> </xsl:stylesheet>
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>
Partager