Salut tout le monde.
J'ai un fichier XML que je voudrais transformer. Pour ce faire, je tente de créer un XSLT.
Mon fichier XMLen entrée ressemble à ça :
et je voudrais récupérer ceci :
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
37
38
39 <Racine name="Racine"> <LEVEL name="Entity"> <VALUE>Un nom</VALUE> <LEVEL name="Division"> <VALUE>Un autre nom</VALUE> <SIZE name="Nom de taille 1"> <VALUE>120.0</VALUE> <COLOR> <NAME value="Nom de couleur 1.1"> <VALUE>-18.65</VALUE> </NAME> <NAME value="Nom de couleur 1.2"> <VALUE>-8.65</VALUE> </NAME> <NAME value="Nom de couleur 1.3"> <VALUE>14.7</VALUE> </NAME> <NAME value="Nom de couleur 1.4"> <VALUE>-9.1</VALUE> </NAME> </COLOR> </SIZE> <SIZE name="Nom de taille 2"> <VALUE>120.0</VALUE> <COLOR> <NAME value="Nom de couleur 2.1"> <VALUE>-18.65</VALUE> </NAME> <NAME value="Nom de couleur 2.2"> <VALUE>-8.65</VALUE> </NAME> <NAME value="Nom de couleur 2.3"> <VALUE>14.7</VALUE> </NAME> </COLOR> </SIZE> </LEVEL> </LEVEL> </Racine>
Je n'ai aucun problème pour créer toute le contenu des balises branches (une pour chaque Level, sauf le dernier level qui créer une balise Leaf).
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 <Racine> <declarations> <attributeDecl name="Name" type="String"/> <attributeDecl name="Nom de taille 1" type="Float"/> <attributeDecl name="Nom de couleur 1.1" type="Float"/> <attributeDecl name="Nom de couleur 1.2" type="String"/> <attributeDecl name="Nom de couleur 1.3" type="Float"/> <attributeDecl name="Nom de couleur 1.4" type="Float"/> <attributeDecl name="Nom de taille 2" type="Float"/> <attributeDecl name="Nom de couleur 2.1" type="Float"/> <attributeDecl name="Nom de couleur 2.2" type="String"/> <attributeDecl name="Nom de couleur 2.3" type="Float"/> </declarations> <branch> <attribute name="Name" value="Un nom"/> <leaf> <attribute name="Name" value="Un autre nom"/> <attribute name="Nom de taille 1" value="1.0"/> <attribute name="Nom de couleur 1.1" value="1.0"/> <attribute name="Nom de couleur 1.2" value="Bonjour"/> <attribute name="Nom de couleur 1.3" value="2.0"/> <attribute name="Nom de couleur 1.4" value="0.16666666666666666"/> <attribute name="Nom de taille 2" value="3.0"/> <attribute name="Nom de couleur 2.1" value="1.0"/> <attribute name="Nom de couleur 2.2" value="Coucou"/> <attribute name="Nom de couleur 2.3" value="2.0"/> </leaf> </branch> </Racine>
Mon problème c'est de créer la balise <Declaration>, car cette dernière doit contenir de manière unique toutes les balise <SIZE> et leurs sous-balises <COLORS>. Mais ces balises sont répétées à l'identique (ormis les valeurs...) pour chaque balise <LEVEL> de dernier niveau (donc transformée en balise <LEAF>)
Pourriez-vous, s'il vous plaît, m'aider à trouver le code correspondant. Moi je tombe toujours sur une répétition de toute les balises, correspondant au nombre de level, ou alors uniquement les dernières balises colors (celles juste avant une nouvelle balise size).
J'espère avoir été clair, et par avance, merci pour votre aide.
PS: Question subsidiaire. Est-il possible avec XSLT de définir le type d'un attribut ==> ça m'aiderai à remplir les champs value="String" et value=Floata". Merci
Partager