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});
                }
            }
        }
    }
}