代码之家  ›  专栏  ›  技术社区  ›  lajili houssem

使用数据集从XML复杂数据类型提取数据

  •  -1
  • lajili houssem  · 技术社区  · 7 年前

    我是XML(C NET MVC)的新手,从XML文件读取数据时遇到问题。我有复杂的数据类型这是我的XML文件:

    <Contour>
     <Elements>  
      <Element Type="Point" Indice="859">Route marseille<Limites>
      <Haut>26.5</Haut>
      <Bas>43.2</Bas>
      </Limites>
      <Point id="01"    X="45"  Y="44" >12</Point>
      <Point id="02"    X="5"   Y="41" >5</Point>
      <Point id="03"    X="4"   Y="464" >3</Point>
      </Element>
     <Element Type="Point" Indice="256">Route Bordeaux<Limites>
      <Haut>16.5</Haut>
      <Bas>12.2</Bas>
      </Limites>
      <Point id="05"    X="6.5" Y="22" >5</Point>
      <Point id="06"    X="58"  Y="46.5">5</Point>
      <Point id="07"    X="98"  Y="4.5" >6</Point>
      </Element>
      </Elements>
      </Contour>
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   jdweng    7 年前

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

    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});
                    }
                }
            }
        }
    
    }
    
        2
  •  1
  •   Jorge    7 年前

    var xmlDoc = new XmlDocument();
    xmlDoc.Load(@"c:\contour.xml");
    

    xmlDoc.LoadXml("<Contour>....</Contour>");
    

    var node = xmlDoc.DocumentElement.SelectSingleNode("/Elements/Element");
    

    string type = node.Attributes["Type"]?.InnerText;
    

    string text = node.InnerText;
    

    answer

    a microsoft guide

    推荐文章