Bonjour,
Je dispose dans un fichier d'une suite d'élément de la forme suivante :
et j'aimerais obtenir
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 <word value="mot1"> <racine value="racine1"> <forme value="forme1"/> </racine> </word> <word value="mot1"> <racine value="racine2"> <forme value="forme2"/> </racine> </word> <word value="mot1"> <racine value="racine2"> <forme value="forme3"/> </racine> </word> <word value="mot2"> <racine value="racine2"> <forme value="forme3"/> </racine> </word> ....
Pour l'instant j'ai réussi à obtenir la liste unique des "<word value="mot">" mais cela ne me fournit que le premier bloc rencontré et non pas la liste des sous éléments (donc la racine et la forme du premier bloc comprenant ce "mot")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <word value="mot1"> <racine value="racine1"> <forme value="forme1"/> </racine> <racine value="racine2"> <forme value="forme2"/> <forme value="forme3"/> </racine> </word>
Voici mon XSL
D'avance merci
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:key name="mot" match="word" use="@value" /> <xsl:template match="/"> <file> <xsl:for-each select="//word[generate-id() = generate-id(key('mot',@value)[1])]"> <xsl:element name="word"> <xsl:value-of select="@value"/> <xsl:element name="racine"> <xsl:value-of select="racine/@value"/> <xsl:element name="forme"> <xsl:value-of select="racine/forme/@value"/> </xsl:element> </xsl:element> </xsl:element> </xsl:for-each> </file> </xsl:template> </xsl:stylesheet>
#EDIT
Je suis tombé par hasard sur un autre sujet , qui m'a montré une meilleur façon de formulé mon problème et un début de solution sur la FAQ
Pour l'instant j'obtient la liste des mot avec ses racine mais la racine forme reste dupliqué par chaque racine.
J'ai du modifié l'architecture de mon XML en entré pour que cela fonctionne mais ce n'est pas un problème.
Il me reste à réitéré cette réunion pour avoir l'architecture la plus parfaite
Nouveau résultat
Nouveau XSL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <word value="mot1"> <racine value="racine1"> <forme value="forme1"/> </racine> <racine value="racine2"> <forme value="forme2"/> </racine> <racine value="racine2"> <forme value="forme3"/> </racine> </word>
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="regrouper" match="value" use="."/> <xsl:template match="/"> <file> <xsl:apply-templates select="file/word/value[generate-id(.)=generate-id(key('regrouper',.)[1])]"/> </file> </xsl:template> <xsl:template match="value"> <word> <xsl:copy-of select="."/> <xsl:apply-templates select="//racine[../value=current()]"/> </word> </xsl:template> <xsl:template match="racine"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet>
Partager