Bonjour

Je ne suis pas un grand guru XML, loin s'en faut

Je sors d'un vieux tiroir un projet de lecture de traces XML pondues par un process externe

L'allure générale est une suite d'objet trace illustrée ci dessous

Dans le projet initial, je chargeais le fichier dans un XmlDocument et puis je parcourait noeud à noeud et elément par elements

Mais c'était il y a un an (la préhistoire)
Depuis lors, j'ai appris plusieurs choses, entre autre l'usage du XmlSerializer
Je me demande donc si je ne devrais pas essayer de definir une classe pouvant contenir la structure attendue d'un élément Trace et parcourir le XmlDocument pas a pas en chargeant une liste de classe Trace avec un XmlSerialiser ?

Accessoirement : existe-il des outils permettant l'extraire le shema de ce type de fichier ?

Il y-a-t-il des spécialistes dans la salle

Merci pour vos suggestions, aide...

L'ancien code de lecture

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
    internal void ReadFile(string srcXml)
    {
      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.Load(srcXml);
 
      PunchElm cPunch;
 
      int order = 0;
      foreach (XmlNode node in xmlDoc.SelectNodes("//trace"))
      {
        cPunch = new PunchElm();
        lPunch.Add(cPunch);
        order++;
        cPunch.order = order;
        string xx;
        cPunch.type = int.Parse(node["type"].InnerText);
        cPunch.speed = int.Parse(node["speed"].InnerText);
        cPunch.mileage = int.Parse(node["mileage"].InnerText);
        cPunch.heading = int.Parse(node["heading"].InnerText);
 
        cPunch.Date = GetTime(node["time"].InnerText);
        cPunch.source = node["source"].InnerText;
 
        string X = node["coordinate"]["longitude"].InnerText;
        string Y = node["coordinate"]["latitude"].InnerText;
        GetXY(X, Y, ref cPunch.XYWGS);
 
        if (null != node["property"])
        {
          xx = node["property"]["key"].InnerText;
          xx = node["property"]["value"].InnerText;
        }
      }
    }
Un extrait du fichier

<?xml version="1.0" encoding="UTF-8"?>
<traces>
<trace>
<type>71</type>
<source>93-JHV-3</source>
<time>2009-11-16T10:20:50.0</time>
<coordinate>
<latitude>51.39833</latitude>
<longitude>5.39118</longitude>
</coordinate>
<mileage>6033431</mileage>
<heading>0</heading>
<speed>1</speed>
</trace>
<trace>
<type>16</type>
<source>93-JHV-3</source>
<time>2009-11-16T10:20:50.0</time>
<coordinate>
<latitude>51.39833</latitude>
<longitude>5.39118</longitude>
</coordinate>
<mileage>6033431</mileage>
<heading>0</heading>
<speed>1</speed>
<property>
<key>ATY</key>
<value>DRW</value>
</property>
</trace>
etc...