Using Xml Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<Element> elements = doc.Descendants("Element").Select(x => new Element() {
type = (string)x.Attribute("Type"),
indice = (int)x.Attribute("Indice"),
name = x.FirstNode.ToString(),
haut = (decimal)x.Descendants ("Haut").FirstOrDefault(),
bas = (decimal)x.Descendants("Bas").FirstOrDefault(),
points = x.Elements("Point").Select(y => new Point() {
id = (string)y.Attribute("id"),
x = (decimal)y.Attribute("X"),
y = (decimal)y.Attribute("Y"),
value = (int)y
}).ToList()
}).ToList();
}
}
public class Element
{
public string type { get; set; }
public int indice { get; set; }
public string name { get; set; }
public decimal haut { get; set; }
public decimal bas { get; set; }
public List<Point> points { get; set;}
}
public class Point
{
public string id { get; set; }
public decimal x { get; set; }
public decimal y { get; set; }
public int value { get; set; }
}
}
Here is results using Xml putting into a DataTable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("Indice", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Haut", typeof(decimal));
dt.Columns.Add("Bas", typeof(decimal));
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("X", typeof(decimal));
dt.Columns.Add("Y", typeof(decimal));
dt.Columns.Add("Value", typeof(int));
XDocument doc = XDocument.Load(FILENAME);
foreach(XElement element in doc.Descendants("Element"))
{
string type = (string)element.Attribute("Type");
int indice = (int)element.Attribute("Indice");
string name = element.FirstNode.ToString();
decimal haut = (decimal)element.Descendants("Haut").FirstOrDefault();
decimal bas = (decimal)element.Descendants("Bas").FirstOrDefault();
foreach(XElement point in element.Elements("Point"))
{
string id = (string)point.Attribute("id");
decimal x = (decimal)point.Attribute("X");
decimal y = (decimal)point.Attribute("Y");
int value = (int)point;
dt.Rows.Add(new object[] { type, indice, name, haut, bas, id, x, y, value});
}
}
}
}
}