2013-10-30 87 views
0
在WPF C#

我已经写代码来获取RSS Atom XML供稿,但它给出了一个例外是根元素ID丢失。如何解决这个问题,你可以帮助我。我的代码是:WPF例外“根元素是缺少”

try 
{ 

    string url = @"http://myweblink/newlink.xml"; 
    string username = ""; 
    string password = ""; 

    Uri uri = new Uri(url); 
    HttpWebRequest rssFeed = (HttpWebRequest)WebRequest.Create(uri); 
    rssFeed.Method = "GET"; 
    rssFeed.Credentials = new NetworkCredential(username, password); 
    using (DataSet rssData = new DataSet()) 
    { 
    //read the xml from the stream of the web request 
    rssData.ReadXml(rssFeed.GetResponse().GetResponseStream()); 

    //loop through the rss items in the dataset 
    //and populate the list of rss feed items 
    foreach (DataRow dataRow in rssData.Tables["item"].Rows) 
    { 
     newlistt.Add(new RssFeedItem 
     { 
     ChannelId = Convert.ToInt32(dataRow["channel_Id"]), 
     Description = Convert.ToString(dataRow["description"]), 
     ItemId = Convert.ToInt32(dataRow["item_Id"]), 
     LinkURL = Convert.ToString(dataRow["link"]), 
     PublishDate = Convert.ToDateTime(dataRow["pubDate"]), 
     Title = Convert.ToString(dataRow["title"]) 
     }); 
    } 
    }  
} 

catch (Exception ee) 
{ 
    MessageBox.Show(ee.Message); 
} 
+0

什么是HTTP://myweblink/newlink.xml? –

+0

egads,请勿使用'DataSet'。这是非常古老的,应该被弃用。看看LINQ to XML。 –

+0

你有看的XML的根元素?该错误表明它没有正确形成。 – Amicable

回答

1

不要使用DataSet;它非常古老,不适用于通用XML阅读。我建议使用LINQ to XML。类似这样的:

var feed = XDocument.Load(rssFeed.GetResponse().GetResponseStream()); 
var ns = feed.Root.Name.Namespace; 
var items = (from e in feed.Root.Elements(ns + "item") 
      select new RssFeedItem 
         { 
          ChannelId = (int?)e.Element(ns + "channel_Id") ?? -1, 
          Description = (string)e.Element(ns + "description"), 
          // ... 
         }).ToList(); 

处理您认为合适的缺失值。

+0

如何把这个列表@MIKE? – user2835256

+0

这说明没有在列表:( – user2835256

+0

啊,它可能是一个XML命名空间的问题。给我。一会儿 –