Bonjour,
Tout d'abord merci de prendre le temps de lire le message et d'essayer d'y repondre, car je suis vraiment en galère...
Voici l'interrogation :
Je dispose d'une bibliothèque sous ce format :
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 <?xml version="1.0" encoding="utf-8"?> <bookcases> <bookcase name="a"> <shelf> <pos>1</pos> <type>small</type> <width>600</width> </shelf> <shelf> <pos>2</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>3</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>4</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>5</pos> <type>large</type> <width>600</width> </shelf> <shelf> <pos>6</pos> <type>large</type> <width>600</width> </shelf> </bookcase> <bookcase name="b"> <shelf> <pos>1</pos> <type>small</type> <width>600</width> </shelf> <shelf> <pos>2</pos> <type>small</type> <width>600</width> </shelf> <shelf> <pos>3</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>4</pos> <type>large</type> <width>600</width> </shelf> <shelf> <pos>5</pos> <type>large</type> <width>600</width> </shelf> <shelf> <pos>6</pos> <type>large</type> <width>600</width> </shelf> </bookcase> <bookcase name="c"> <shelf> <pos>1</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>2</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>3</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>4</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>5</pos> <type>medium</type> <width>600</width> </shelf> <shelf> <pos>6</pos> <type>large</type> <width>600</width> </shelf> </bookcase> </bookcases>
Et d'une liste de livre classifiée et ordonnée comme suit :
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 <?xml version='1.0' ?> <mandybooks> <class name="music" size="586" typeOfShelf="large"> <book class="music"> <author>vernon, Paul</author> <title>A History of the Portuguese Fado</title> <type>Medium</type> </book><book class="music"> <author>Russell, Bill</author> <title>Bill Russell's American Music</title> <type>Large</type> </book><book class="music"> <author>Vail, Ken</author> <title>Bird's Diaries</title> <type>Large</type> </book> .... </class <class name="history usa" size="493" typeOfShelf="large"><book class="history usa"> <book>...</book> ... </class> ... <class name="mystery" size="591" typeOfShelf="medium"><book class="mystery"> <book>...</book> ... </class> <class name="humour" size="507" typeOfShelf="medium"><book class="humour"> <book>...</book> ... </class> <class name="mystery australia" size="495" typeOfShelf="small"><book class="mystery australia"> <book>...</book> ... </class> <class name="mystery italy" size="225" typeOfShelf="small"><book class="mystery italy"> <book>...</book> ... </class> </mandybooks>
Le but est de loader chaque élement class dans les éléments shelf du premier document (un <class ne peut jamais etre coupé en deux et l'attribut typeOfShelf doit correspondre à l'attribut type de l'élement <shelf> où il doit etre loadé).
Ma première technique a été de créer un template qui peut créer un groupe de N class dont la somme des attributs size tient dans une taille fixée, en utilisant la recursion basique.
J'avoue que je suis à présent perdu, puisqu'une fois qu'on a parcouru tous les <class> et qu'on doit passer à l'étagère suivante, on doit se souvenir des étagères qui ont été remplies et des <class> qui ont été déjà rangées.
On m'a assuré que la solution restait simple à mettre en oeuvre, mais j'avoue que je patauge vraiment ... (Je ne suis pas tres bon en XSLT certes, mais 1 semaines sans avancer, c'est difficile ...)
Merci d'avance pour ceux qui réfléchiront à mon problème.
Partager