Hello,
J'aimerais faire un regroupement assez complexe, donc avis au pro de la méthode de muench ( http://www.jenitennison.com/xslt/gro...muenchian.html )!
Le plus parlant étant un exemple, en voici un :
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
<?xml version="1.0" encoding="UTF-8"?>
<list>
	<a seq="1">
		<b />
	</a>
	<a seq="2" keep="true">
		<b />
	</a>
	<a seq="3" keep="true">
		<b />
	</a>
	<a seq="4">
		<b />
	</a>
	<a seq="5">
		<b />
	</a>
	<a seq="6" keep="true">
		<b />
	</a>
	<a seq="7">
		<b />
	</a>
 
	<a seq="8" keep="true">
		<b />
	</a>
</list>
J'ai ajouté l'attribut "seq" par soucis de lisibilité mais il n'est pas présent dans mon cas.

En gros, je veux grouper sous un même groupe les noeuds consécutifs qui ont l'attribut keep='true' ainsi qu'éventuellement, le premier qui les suit qui n'a pas l'attribut "keep".
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
<?xml version="1.0" encoding="UTF-8"?>
<list>
	<a seq="1">
		<b />
	</a>
	<group>
		<a debug="1" seq="2" keep="true">
			<b />
		</a>
		<a seq="3" keep="true">
			<b />
		</a>
		<a seq="4">
			<b />
		</a>
	</group>
	<a seq="5">
		<b />
	</a>
	<group>
		<a debug="1" seq="6" keep="true">
			<b />
		</a>
		<a seq="7">
			<b />
		</a>
	</group>
 
	<group>
		<a debug="1" seq="8" keep="true">
			<b />
		</a>
	</group>
</list>
Pour le moment j'ai fait que ça :
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" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:key 
use="generate-id(preceding-sibling::*[@keep='true' and preceding-sibling::*[1][not(@keep)]][1])"
 name="next" 
 match="a[@keep='true' and preceding-sibling::*[1][@keep='always']]"/>
 
<xsl:template match="a[@keep='true' and preceding-sibling::*[1][not(@keep)]]">
  <group>
  <xsl:copy>
	<xsl:attribute name="debug">1</xsl:attribute>
	<xsl:apply-templates select="@*" />
	<xsl:apply-templates select="*" />
  </xsl:copy>
  <xsl:for-each select="key('next',generate-id(node()))">
	  <xsl:copy>
		<xsl:attribute name="debug">1</xsl:attribute>
		<xsl:apply-templates select="@*" />
		<xsl:apply-templates select="*" />
	  </xsl:copy>
  </xsl:for-each>
  </group>
</xsl:template>
 
 <xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>
Des idées?