Bonjour,

Je suis confronté au problème suivant :

j'ai le fichier XML suivant (source.xml) :

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
 
<?xml version="1.0"?>
<root>
    <list>
        <object>
            <family>house</family>
            <name>door</name>
            <price>100</price>
        </object>
        <object>
            <family>house</family>
            <name>window</name>
            <price>200</price>
        </object>
        <object>
            <family>house</family>
            <name>bedroom</name>
            <price>300</price>
        </object>
        <object>
            <family>human</family>
            <name>arm</name>
            <price>400</price>
        </object>
        <object>
            <family>human</family>
            <name>foot</name>
            <price>600</price>
        </object>
        <object>
            <family>house</family>
            <name>bathroom</name>
            <price>700</price>
        </object>
        <object>
            <family>human</family>
            <name>hand</name>
            <price>300</price>
        </object>
    </list>
</root>
Et je veux obtenir un fichier XML qui a la forme suivante (target.xml) :

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
 
<?xml version="1.0"?>
<root>
    <list>
        <family name="house">
            <object>
                <name>door</name>
            </object>
            <object>
                <name>window</name>
            </object>
            <object>
                <name>bedroom</name>
            </object>
            <object>
                <name>bathroom</name>
            </object>
        </family>
        <family name="human">
            <object>
                <name>arm</name>
            </object>
            <object>
                <name>foot</name>
            </object>
            <object>
                <name>hand</name>
            </object>
        </family>
    </list>
</root>
Pour l'instant je fais ça, mais cela ne me donne pas encore le bon résultat (somework.xsl) :

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
 
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/root">
        <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <anotherlist>
                <xsl:for-each select="list">
                    <xsl:if test="object">
                        <xsl:for-each select="object" order-by="+family">
                            <family name="{family}">
                                <object>
                                    <name>
                                        <xsl:value-of select="name"/>
                                    </name>
                                    <price>
                                        <xsl:value-of select="price"/>
                                    </price>
                                </object>
                            </family>
                        </xsl:for-each>
                    </xsl:if>
                </xsl:for-each>
            </anotherlist>
        </root>
    </xsl:template>
</xsl:stylesheet>
Quelqu'un peut-il m'aider ?

Merci.