Bonjour,
Tout d'abord pardon pour le titre, mais je n'ai pas réussi à en trouver un mieux.
Voici mon XML simplifié :
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.
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>
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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1992 : N1, N4 1993 : N3 1995 : N2
Tout ce que j'ai réussi à faire, c'est mettre mes articles par date :
Ce qui me donne quelque chose de se style :
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>
Si vous avez une idée pour m'aiguiller sur la bonne voie,
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
Partager