J'ai un long fichier XML ayant cette structure :
Chaque "settinggroup" contient un nombre de "setting" différent, mais tous ces "setting" ont la même structure interne.
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 <settings> <settinggroup name="nom_groupe" autres attributs> <setting name="nom_paramètre"> contenant plusieurs balises enfant... </setting> <setting name="nom_paramètre"> contenant plusieurs balises enfant... </setting> etc... <settinggroup> <settinggroup name="nom_groupe" autres attributs> <setting name="nom_paramètre"> contenant plusieurs balises enfant... </setting> <setting name="nom_paramètre"> contenant plusieurs balises enfant... </setting> <setting name="nom_paramètre"> contenant plusieurs balises enfant... </setting> etc... <settinggroup> etc... </settings>
Je voudrais :
- trier les <settinggroup> selon l'ordre alphabétique de leur attribut "name" et conserver tous leurs autres attributs tels quels.
- à l'intérieur de chaque <settinggroup>, trier les <setting> également selon l'ordre alphabétique de leur attribut "name" tout en conservant leur structure interne telle quelle.
Je découvre XSL et j'ai beaucoup de mal avec cette syntaxe !!!
Voici le fichier auquel je suis arrivé :
Les <settinggroup> sont bien triés selon l'ordre alphabétique et tous les contenus sont conservés.
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 <?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"/> <xsl:strip-space elements="*"/> <xsl:template match="/settings"> <xsl:apply-templates select="/settings/settinggroup"> <xsl:sort select="@name"/> </xsl:apply-templates> </xsl:template> <xsl:template match="/settings/settinggroup"> <xsl:copy> <xsl:apply-templates select="*|@*"/> </xsl:copy> </xsl:template> <xsl:template match="/settings/settinggroup/setting"> <xsl:copy> <xsl:apply-templates select="*|@*"/> </xsl:copy> </xsl:template> <xsl:template match="*|@*"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Mais les <setting> à l'intérieur de chaque <settinggroup> ne sont évidemment pas triés et je ne vois pas comment je peux faire.
Question subsidiaire et moins importnte : la sortie n'est pas indentée malgré la commande <xsl:output method="xml" indent="yes"/>. Pourquoi ?
Merci pour votre aide...
Partager