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

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>
mon document XML d'entree 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>
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
<?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>