2013-10-30 89 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命名空間的問題。給我。一會兒 –