如何解析DataTable的XML?

时间:2017-06-04 06:02:59

标签: c# xml deserialization xml-deserialization

我有一个XML文件,当我使用XSD工具从XML创建一个类对象时,我收到一条消息说"一个名为' link'已经属于此DataTable:无法将嵌套表设置为相同的名称。

我想知道如何正确反序列化此XML文件,以便我可以在应用上显示数据。这个XML文件基本上只是Rss新闻源数据。

您可以在此处查看整个XML文件结构:https://github.com/karimo94/XMLDemo/blob/master/leaguenews.xml

3 个答案:

答案 0 :(得分:0)

看看这个设计

https://blogs.windows.com/buildingapps/2017/05/01/master-master-detail-pattern/#.WSrAkFuGID4.twitter#7gkbxLDhEVrcmL6M.97

DataSet ds = new DataSet();
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataSet));
        FileStream readStream = new FileStream("leaguenews.xml", FileMode.Open);
        ds = (DataSet)xmlSerializer.Deserialize(readStream);
        readStream.Close();
        dataGridView1.DataSource = ds.Tables[0];

答案 1 :(得分:0)

尝试以下:

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\test1.xml";
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Title", typeof(string));
            dt.Columns.Add("Description", typeof(string));
            dt.Columns.Add("Link", typeof(string));
            dt.Columns.Add("IsPermaLink", typeof(Boolean));
            dt.Columns.Add("GUID", typeof(string));
            dt.Columns.Add("Publish Date", typeof(DateTime));
            dt.Columns.Add("Width", typeof(int));
            dt.Columns.Add("Height", typeof(int));
            dt.Columns.Add("URL", typeof(string));

            XDocument doc = XDocument.Load(FILENAME); //or uri
            List<XElement> items = doc.Descendants("item").ToList();

            foreach (XElement item in items)
            {
                dt.Rows.Add(new object[] {
                    (string)item.Element("title"),
                    (string)item.Element("description"),
                    (string)item.Element("link"),
                    (Boolean)item.Element("guid").Attribute("isPermaLink"),
                    (string)item.Element("guid"),
                    (DateTime)item.Element("pubDate"),
                    (int)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("width"),
                    (int)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("height"),
                    (string)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("url")
                });
            }

        }
    }

}

答案 2 :(得分:0)

我尝试了两种方式,老实说,我无法正确地反序列化而没有错误。幸运的是,我能够使用rss2json.com并将Rss提要转换为json,我可以使用Newtonsoft Json.Net进行解析