Bonjour à tous,
Je patauge un peu sur ce problème depuis un moment maintenant sans parvenir à trouver la solution. La transformation XSLT sert à changer le format d'un fichier XML vers un XML légèrement différent. Je décrirai d'abord brièvement les formats d'entrée et de sortie, puis vous donnerai le code XSL que j'utilise. Enfin, je décrirai le problème auquel je me heurte.
Format d'entrée :
En sortie, il faut :
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 <IX_PH> <PH> <CDL> (...) </CDL> <WH> <WL> (...) </WL> <WEL> (...) </WEL> <PNRF> <PN (...) /> <PN (...) /> (...) </PNRF> </WH> <GH> (...) </GH> <R> (...) </R> </PH> </IX_PH>
- renommer IX_PH en IX_WH
- renommer PH en WH
- renommer les nœuds PN en EF et le nœud PNRF en EFRF
- "ramener" les nœuds WL, WEL et PNRF un niveau au-dessus
- mettre le nœud PNRF à la fin (après le nœud R)
Ça donne le format de sortie suivant :
Le code XSL utilisé est le suivant (avec les modifs proposées ci-dessous) :
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 <IX_WH> <WH> <CDL> (...) </CDL> <WL> (...) </WL> <WEL> (...) </WEL> <GH> (...) </GH> <R> (...) </R> <EFRF> <EF (...) /> <EF (...) /> (...) </EFRF> </PH> </IX_WH>
Mon problème est qu'en output, le nœud EFRF se situe entre les nœuds WEL et GH au lieu de se trouver à la fin. Voilà.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="IX_PH"> <xsl:element name="IX_WH"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="PH"> <WH> <xsl:copy-of select="@*[not(name()='Version')]"/> <xsl:attribute name="VersionNb"><xsl:value-of select="@Version"/></xsl:attribute> <!-- Renommage d'un attribut --> <xsl:apply-templates/> <xsl:apply-templates select="WH/PNRF"/> </WH> </xsl:template> <xsl:template match="WH"> <xsl:apply-templates select="*[not(self::PNRF)]"/> </xsl:template> <xsl:template match="CDL"> <xsl:element name="CDL"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <!-- Renommer les nuds CDL/CD/CA en CDL/CD/A --> <xsl:template match="CD"> <xsl:element name="CD"> <xsl:copy-of select="@* | node()[name()='P'][name()='S'][name()='Version'][name()='UA']"/> <xsl:for-each select="./CA"> <xsl:element name="A"> <xsl:copy-of select="@*"/> </xsl:element> </xsl:for-each> <xsl:copy-of select="node()[not(name()='P')][not(name()='S')][not(name()='Version')][not(name()='UA')][not(name()='CA')]"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="WL"> <xsl:element name="WL"> <xsl:copy-of select="*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="WEL"> <xsl:element name="WEL"> <xsl:copy-of select="*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="GH"> <xsl:element name="GH"> <xsl:copy-of select="*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="R"> <xsl:element name="R"> <xsl:copy-of select="*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="PNRF"> <xsl:element name="EFRF"> <xsl:for-each select="./PN"> <xsl:element name="EF"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>
Désolé si mon post est compliqué, brouillon, pas clair ou autre, mais j'ai réellement besoin d'aide sur cette affaireJe peux tout à fait faire un post explicatif simplifié si nécessaire.
Merci d'avance pour vos lumières !
Partager