hiérarchisation sous deux noeuds parents créés en fonction de noeuds enfants
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
Code:
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> |
XML OUTPUT FILE
Code:
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> |
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:
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> |
Pouvez-vous m'aider à obtenir ces transformations?