Bonjour,
je débute en XML et XSLT et j'ai besoin d'écrire une transformation qui semble bien plus difficile que je ne l'imaginais.
J'ai créé un fichier xml à partir d'un tableur et j'ai besoin de hiérarchiser les élements "row" de mon fichier xml sous deux noeuds parents créés selon des éléments enfant ("catalog" et "series", "catalog" étant le parent de "series", et "series" parent de "row"). Dans un second temps, j'aimerais donner des attributs à mes noeuds parent nouvellement créés.
Voici une partie simplifiée des fichiers xml de départ et le fichier xml tel que je le souhaiterais.
XML INPUT FILE
XML OUTPUT FILE
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 <?xml version="1.0" encoding="UTF-8"?> <root> <row> <year>1999</year> <name>name1</name> <catalog>catalogA</catalog> <series>seriesA</series> </row> <row> <year>2000</year> <name>name2</name> <catalog>catalogA</catalog> <series>seriesB</series> </row> <row> <year>2001</year> <name>name3</name> <catalog>catalogB</catalog> <series>seriesA</series> </row> <row> <year>2002</year> <name>name4</name> <catalog>catalogB</catalog> <series>seriesB</series> </row> <row> <year>2003</year> <name>name5</name> <catalog>catalogA</catalog> <series>seriesA</series> </row> </root>
J'ai essayé différentes choses, mais je ne parviens pas à formuler des instructions convenables ni à les placer dans le bon ordre. Tout ce que j'ai pu faire, c'est ce fichier xsl qui ne semble pas fonctionner...
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 <?xml version="1.0" encoding="UTF-8"?> <root> <catalog id="catalogA"> <series id="seriesA"> <row> <year>1999</year> <name>name1</name> <catalog>catalogA</catalog> <series>seriesA</series> </row> <row> <year>2003</year> <name>name5</name> <catalog>catalogA</catalog> <series>seriesA</series> </row> </series> <series id="seriesB"> <row> <year>2000</year> <name>name2</name> <catalog>catalogA</catalog> <series>seriesB</series> </row> </series> </catalog> <catalog id="catalogB"> <series id="seriesA"> <row> <year>2001</year> <name>name3</name> <catalog>catalogB</catalog> <series>seriesA</series> </row> </series> <series id="seriesB"> <row> <year>2002</year> <name>name4</name> <catalog>catalogB</catalog> <series>seriesB</series> </row> </series> </catalog> </root>
Pouvez-vous m'aider à obtenir ces transformations?
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <root> <xsl:for-each select="/root/row/catalog"> <catalog> <xsl:attribute name="id"><xsl:value-of select="./root/row/@IsMulti"/></xsl:attribute> <xsl:for-each select="./root/row/series"> <series> <xsl:attribute name="id"><xsl:value-of select="./root/row/@IsMulti"/></xsl:attribute> <xsl:for-each select="./root/row"> <row> <year> <xsl:value-of select="./year"/> </year> <name> <xsl:value-of select="./name"/> </name> <catalog> <xsl:value-of select="."/> </catalog> <series> <xsl:value-of select="."/> </series> </row> </xsl:for-each> </series> </xsl:for-each> </catalog> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet>
Partager