Bonjour,

Tout d'abord pardon pour le titre, mais je n'ai pas réussi à en trouver un mieux.

Voici mon XML simplifié :

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
<sdx:results>
<sdx:result>
	<article id="N1">
		<event role="operation">
			<date>	
				<year> 1992 </year>
			</date>
		</event>
	</article>
</sdx:result>
<sdx:result>
	<article id="N2">
		<event role="operation">
			<date role="debut">
				<year> 1991 </year>
			</date>
			<date role="fin">
				<year> 1993 </year>
			</date>
		</event>
		<event role="operation">
			<date>
				<year> 1995 </year>
			</date>
		</event>
	</article>
</sdx:result>
<sdx:result>
	<article id="N3">
		<event role="operation">
			<date role="debut">
				<year> 1992 </year>
			</date>
			<date role="fin">
				<year> 1993 </year>
			</date>
		</event>
	</article>
</sdx:result>
<sdx:result>
	<article id="N4">
		<event role="operation">
			<date>
				<year> 1992 </year>
			</date>
		</event>
		<event role="operation">
			<date role="debut">
				<year> 1990 </year>
			</date>
			<date role="fin">
				<year> 1991 </year>
			</date>
		</event>
	</article>
</sdx:result>
</sdx:results>
Chaque event "operation" est daté, soit il n'y a qu'une seule date (car durée d'1 an ou moins), soit il y a une date de début et de fin.
Il peut y avoir plusieurs event "operation" par article.

Ce que je voudrai faire, c'est récupérer l'id de mes articles selon la date de fin (si il y a plusieurs event, prendre la plus grande date). Dans cet exemple, cela donnerai donc :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
1992 : N1, N4
1993 : N3
1995 : N2
Je pense qu'il faut que j'utilise xsl:key pour "rassembler" mes nœuds selon les dates, et en triant la valeur de la date maximale avec un tri et un position()=1, mais cela fait déjà un moment que je tourne en rond, et je m'y suis emmêler les neurones.
Tout ce que j'ai réussi à faire, c'est mettre mes articles par date :

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
 
<xsl:key name="date" match="adfi:event[@role='operation']/adfi:date/adfi:year" use="."/>
<xsl:key name="dateF" match="adfi:event[@role='operation']/adfi:date[@role='fin']/adfi:year" use="."/>
 
 
<xsl:for-each select="//adfi:event[@role='operation']/adfi:date/adfi:year[generate-id() = generate-id(key('dateF', .)[1]) or generate-id() = generate-id(key('date', .)[1])]">
	<xsl:sort select="." />
 
	<xsl:variable name="vdate" select=".">
		<xsl:value-of select="."/>
	</xsl:variable>
	<xsl:value-of select="$vdate"/>
 
	<xsl:for-each select="//sdx:result[./adfi:article/adfi:event/adfi:date/adfi:year=$vdate]">
		<xsl:value-of select="./adfi:article/@id"/>
	</xsl:for-each>
 
</xsl:for-each>
Ce qui me donne quelque chose de se style :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
1991 : N4
1992 : N1, N4
1993 : N2, N3
1995 : N2
Si vous avez une idée pour m'aiguiller sur la bonne voie,