Bonjour à tous,
C'est mon premier message sur le forum, d'habitude j'arrive à trouver une solution en farfouillant ici et là mais cette fois, je bloque.
Je m'excuse par avance si la question a déjà été posée. C'est à peu près sûr qu'elle l'a été, enfin j'imagine, un truc si simple et si utile, je dois pas être le premier à vouloir faire ça mais j'ai pas trouvé (ou plutôt compris) l'info qui solutionnerait mon soucis.
Je vais essayer d'être compréhensible pour vous détailler mon soucis :
J'ai un fichier XML que je génère par code et qui a cette architecture :
La génération du XML fonctionne très bien, le fichier est bien 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 <ListeFiches> <ID>0</ID> <Nom>nom 1</Nom> <Datec>05/02/2016</Datec> <Vidanges> <Vidange> <IDv>1</IDv> <Huile>Huile0</Huile> <Filtre>Filtre 0</Filtre> <DateV>05/02/2016</DateV> </Vidange> <Vidange> <IDv>2</IDv> <Huile>Huile1</Huile> <Filtre>Filtre 1</Filtre> <DateV>05/02/2016</DateV> </Vidange> <Vidange> <IDv>3</IDv> <Huile>Huile2</Huile> <Filtre>Filtre 2</Filtre> <DateV>05/02/2016</DateV> </Vidange> </Vidanges> <Revision>05/02/2016</Revision> <CT>05/02/2016</CT> <Notification>True</Notification> <Carburants> <Carburant> <IDc>1</IDc> <Type>Essence</Type> <DateP>05/02/2016</DateP> <KmPa>100</KmPa> <KmTo>300</KmTo> <PrixUnitaire>2.5</PrixUnitaire> <PrixTotal>125</PrixTotal> <Volume>50</Volume> </Carburant> <Carburant> <IDc>2</IDc> <Type>Essence</Type> <DateP>05/03/2016</DateP> <KmPa>100</KmPa> <KmTo>300</KmTo> <PrixUnitaire>2.5</PrixUnitaire> <PrixTotal>125</PrixTotal> <Volume>50</Volume> </Carburant> <Carburant> <IDc>3</IDc> <Type>Essence</Type> <DateP>05/04/2016</DateP> <KmPa>100</KmPa> <KmTo>300</KmTo> <PrixUnitaire>2.5</PrixUnitaire> <PrixTotal>125</PrixTotal> <Volume>50</Volume> </Carburant> </Carburants> <Divers> <Diver> <IDd>1</IDd> <Designation>Désignation 0</Designation> <DateD>05/02/2016</DateD> </Diver> <Diver> <IDd>2</IDd> <Designation>Désignation 1</Designation> <DateD>05/03/2016</DateD> </Diver> <Diver> <IDd>3</IDd> <Designation>Désignation 2</Designation> <DateD>05/04/2016</DateD> </Diver> </Divers> </FicheEngin> </ListeFiches>
Là où je bloque :
Je dispose d'une classe FicheMecanique qui reprends les valeurs contenu entre les balises FicheEngin de mon XML.
Cette classe FicheMecanique est construite comme ceci :
Et trois classes FicheCarburant, FicheDivers et FicheVidange construites comme ceci (elles se ressemblent donc je n'en met qu'une pour l'exemple) :
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 public class FicheMecanique { public int ID { get; set; } public string Nom { get; set; } public DateTime DateC { get; set; } public List<FicheVidange> ListeVidange { get; set; } public DateTime DateR { get; set; } public DateTime DateCT { get; set; } public bool Notification { get; set; } public List<FicheCarburant> ListeCarburant { get; set; } public List<FicheDivers> ListeDivers { get; set; } public FicheMecanique(int id, string nom, DateTime datec, DateTime dater, DateTime datect, bool notif, List<FicheCarburant> listeCarb, List<FicheDivers> listeDivers, List<FicheVidange> listeVid) { this.ID = id; this.Nom = nom; this.DateC = datec; this.DateR = dater; this.DateCT = datect; this.Notification = notif; this.ListeCarburant = listeCarb; this.ListeDivers = listeDivers; this.ListeVidange = listeVid; }
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 public class FicheVidange { public int IDvid { get; set; } public DateTime DateVid { get; set; } public string TypeHuile { get; set; } public string RefFiltre { get; set; } public FicheVidange(int id, DateTime dv, string huil, string filt) { this.IDvid = id; this.DateVid = dv; this.TypeHuile = huil; this.RefFiltre = filt; } }
Je souhaite donc parcourir mon XML et en extraire chaque FicheEngin dans une FicheMecanique (et placer chaque FicheMecanique dans une list of course).
Je bloque sur mes "sous-noeuds" Vidanges, Carburants et Divers.
Je n'arrive pas à parcourir ces sous noeuds pour créer la fiche correspondante (FicheVidange, FicheCarburant, FicheDivers), placer la fiche créée dans une list<FicheVidange(ou autre)>, pour compléter ma FicheMecanique qui attends en paramètre, entre autre, les 3 listes de vidange,carburant et divers.
Pour l'instant j'ai fait ça comme code mais ça me lève une exception :
(extrait)
L'exception levée est : " Exception levée : 'System.Xml.XmlException' dans System.Xml.dll " ...
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 listeCarburant.Clear(); // de type List<FicheCarburant> listeDivers.Clear(); listeVidange.Clear(); var fiches = from fi in xmlDoc.Descendants() select fi; // xmlDoc est un XDocument contenant le xml que j'ai mis plus haut foreach (XElement xe in fiches) { if (xe != null) { var recupListCarb = from carb in xmlDoc.Descendants("Carburants") select carb; foreach (XElement xel in recupListCarb) { if (xel != null) { var ficCarb = new FicheCarburant(Convert.ToInt32(xel.Element("IDc").Value), xel.Element("Type").Value, Convert.ToDateTime(xel.Element("DateP").Value), Convert.ToDouble(xel.Element("KmPa").Value), Convert.ToDouble(xel.Element("KmTo").Value), Convert.ToDouble(xel.Element("PrixUnitaire").Value), Convert.ToDouble(xel.Element("Volume").Value)); listeCarburant.Add(ficCarb); } } } }
Voilà, j'espère avoir été assez claire, c'est jamais bien évident de l'être.
Je vous remercie pour toutes propositions qui me permettrait de me débloquer.
Je suis à peu près sûr que c'est d'une facilité enfantine mais ce n'est que lorsqu'on le sait qu'on peut le dire
Partager