2017-06-04 21 views
0

我有一個XML文件,當我使用XSD工具從XML創建一個類對象時,我收到一條消息:「名爲'link'的列已經屬於這個DataTable:無法將嵌套表設置爲相同的名稱。如何去除一個DataTable的XML?

我想知道我怎樣才能正確地反序列化這個XML文件,這樣就可以在一個應用程序中顯示數據。該XML文件基本上是RSS新聞聚合數據。

你可以看到整個XML文件結構在這裏:https://github.com/karimo94/XMLDemo/blob/master/leaguenews.xml

+0

我們需要看到一個包含示例XML的[mcve]以確定發生了什麼,但您可以嘗試使用xsd.exe選項['/classes'](https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx)生成POCO,而不是'DataSet'使用'/ dataset'。 – dbc

+0

相關? [代碼返回錯誤名爲'link'的列已屬於](https://stackoverflow.com/q/18209393/3744182)。 – dbc

+0

要使用RSS,您可以使用[SyndicationFeed](https://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed(v = vs.110).aspx)類。 –

回答

0

我試圖左右逢源和誠實,我不能讓它沒有錯誤正確反序列化。幸運的是,我能夠使用rss2json.com並將Rss源轉換爲一個json,我可以使用Newtonsoft解析Json.Net

0

嘗試followng:

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

     } 
    } 

}