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 :
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>
La génération du XML fonctionne très bien, le fichier est bien formaté.
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 :
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;
        }
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
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)
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);
                            }
                        }
                   }
              }
L'exception levée est : " Exception levée : 'System.Xml.XmlException' dans System.Xml.dll " ...

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