Bonjour à tous,
je ne suis pas sur d'avoir choisi le bon forum, mais je pose tout de même la question ici...
Alors voilà, je cherche un moyen de transformer un fichier XML en un autre fichier XML via XSL.
Le probleme est que je n'arrive pas à regrouper certaines balises, donc soit le fichier XML suivant composé d'element "element" representant soit un 'folder' soit un 'file' de structure équivalente à :
Je voudrais regrouper les 'folder' au début, puis les 'files' ensuite et par ordre croissant, pour obtenir quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <filesystem> <element name = "b" fullpath="..." parent = "..." type="folder"/> <element name = "a" fullpath="..." parent = "..." type="folder"/> <element name = "d" fullpath="..." parent = "..." type="file"/> <element name = "c" fullpath="..." parent = "..." type="file"/>
J'ai essayé avec un XSL suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <filesystem> <folder name = "a"/> <folder name = "c"/> <file name = "a"/> <file name = "b"/> </filesystem>
Le probleme est le
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 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" omit-xml-declaration="no"/> <xsl:template match="/"> <xsl:element name="filesystem"> <xsl:apply-templates select="element[@type='folder']"><xsl:sort select="@name"/></xsl:apply-templates> </xsl:element> </xsl:template> <xsl:template match="element[@type='folder']"> <xsl:element name="folder"> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> <xsl:attribute name="parent"><xsl:value-of select="@parent"/></xsl:attribute> <xsl:attribute name="fullpath"><xsl:value-of select="@fullpath"/></xsl:attribute> </xsl:element> </xsl:template> <xsl:template match="element[@type='file']"> <xsl:element name="file"> <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute> <xsl:attribute name="parent"><xsl:value-of select="@parent"/></xsl:attribute> <xsl:attribute name="fullpath"><xsl:value-of select="@fullpath"/></xsl:attribute> </xsl:element> </xsl:template> </xsl:stylesheet>qui ne veut pas me selectionner les noeuds "element" avec attribut type='folder'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <xsl:apply-templates select="element[@type='folder']">
Le résultat avec ce XSL est :
Si j'enleve le
Code : Sélectionner tout - Visualiser dans une fenêtre à part <filesystem/>de apply-templates, alors le résultat est "similaire" à ce que je veux, mais pas trié, et je ne peux pas controler l'ordre d'apparition des "folder" et des "files" (je veux les folders en premier).
Code : Sélectionner tout - Visualiser dans une fenêtre à part select="element[@type='folder']
Quelqun'un à une idée ?
Merci !
Partager