Bonjour,
j'ai un document XML qui contient une liste de documents de different type.
Je souhaite les grouper par la valeur de ce type or je n'arrive pas a utiliser cette fonction group-by car je dois lire le contenu de ma valeur, indiquée en rouge ci dessous.
Est-il aussi possible de créer un ordre dans le groupe, par exemple grouper d'abord "promoted", puis "tool", puis autre chose dans mon choix d'ordre ?
pour avoir en sortie
promoted:item1, item2, item4
tool:item3,item5,item6
mon document XML d'entree est le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <document> <content name="thevalue">item1</content> <content name="v_strType">promoted</content> </document>
et mon code XSL est le suivant
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 <?xml version="1.0" encoding="UTF-8"?> <vce> <document> <content name="thevalue">item1</content> <content name="v_strType">promoted</content> </document> <document> <content name="thevalue">item2</content> <content name="v_strType">promoted</content> </document> <document> <content name="thevalue">item3</content> <content name="v_strType">tool</content> </document> <document> <content name="thevalue">item4</content> <content name="v_strType">promoted</content> </document> <document> <content name="thevalue">item5</content> <content name="v_strType">tool</content> </document> <document> <content name="thevalue">item6</content> <content name="v_strType">tool</content> </document> <document> <content name="thevalue">item7</content> <content name="v_strType">promoted</content> </document> </vce>
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 <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/vce"> <vce> <xsl:for-each-group select="document" group-by="@v_strType"> <xsl:value-of select="current-grouping-key()"/> POSITION : <xsl:value-of select="position()"/> <xsl:value-of select="content[@name='thevalue']"/> <xsl:value-of select="content[@name='v_strType']"/> </xsl:for-each-group> <!-- <xsl:for-each select="document"> <xsl:if test="( (content[@name='v_strType']='tool') ) "> ecrire </xsl:if> </xsl:for-each> --> </vce> </xsl:template> </xsl:stylesheet>
quelqu'un aurait-il une suggestion svp? merci
sinon j'ai encore cette option, mais elle relit tous les documents... tres mauvais code
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="1.0"> <xsl:template match="/vce"> <vce> <xsl:for-each select="document"> <xsl:if test="( (content[@name='v_strType']='tool') ) "> <xsl:value-of select="current-grouping-key()"/> POSITION : <xsl:value-of select="position()"/> <xsl:value-of select="content[@name='thevalue']"/> <xsl:value-of select="content[@name='v_strType']"/> </xsl:if> </xsl:for-each> <xsl:for-each select="document"> <xsl:if test="( (content[@name='v_strType']='promoted') ) "> <xsl:value-of select="current-grouping-key()"/> POSITION : <xsl:value-of select="position()"/> <xsl:value-of select="content[@name='thevalue']"/> <xsl:value-of select="content[@name='v_strType']"/> </xsl:if> </xsl:for-each> </vce> </xsl:template> </xsl:stylesheet>
Partager