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 :
J'ai ajouté l'attribut "seq" par soucis de lisibilité mais il n'est pas présent dans mon cas.
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>
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".
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
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>Des idées?
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>![]()
Partager