LINQ与ATOM提要

我正在尝试创建一个简单的Silverlight应用程序,它调用ATOM提要并显示文章标题和提交日期。 我发现使用RSS提要和LINQ很容易做到这一点,但是我很难尝试使用ATOM提要做同样的事情。 下面的代码没有产生错误,但也没有产生任何结果! 我错过了什么?

来源ATOM提要:weblogs.asp.net/scottgu/atom.aspx

源教程:www.switchonthecode.com/tutorials/silverlight-datagrid-the-basics

源代码:

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Xml.Linq; namespace BasicDataGridTutorial { public partial class Page : UserControl { public Page() { InitializeComponent(); } private void btnPopulate_Click(object sender, RoutedEventArgs e) { //disable the populate button so it's not clicked twice //while the data is being requested this.btnPopulate.IsEnabled = false; //make a new WebClient object WebClient client = new WebClient(); //hook the event that's called when the data is received client.DownloadStringCompleted += client_DownloadStringCompleted; //tell the WebClient to download the data asynchronously client.DownloadStringAsync( //new Uri("http://feeds.feedburner.com/SwitchOnTheCode?format=xml")); new Uri("http://weblogs.asp.net/scottgu/atom.aspx")); } private void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { this.btnPopulate.IsEnabled = true; if (e.Error == null) { XDocument document = XDocument.Parse(e.Result); XNamespace xmlns = "http://www.w3.org/2005/Atom"; var sotcPosts = from entry in document.Descendants(xmlns+ "entry") select new SOTCPost { Title = (string)entry.Element(xmlns + "feedEntryContent").Value, Date = (string)entry.Element(xmlns + "lastUpdated").Value }; this.sotcDataGrid.ItemsSource = sotcPosts; } } private void btnClear_Click(object sender, RoutedEventArgs e) { this.sotcDataGrid.ItemsSource = null; } } public class SOTCPost { public string Title { get; set; } public string Date { get; set; } } } 

我建议使用SyndicationFeed而不是自己解析ATOM feed。 它可以更好地处理您可能没有考虑过的边缘情况。

 XmlReader reader = XmlReader.Create("http://localhost/feeds/serializedFeed.xml"); SyndicationFeed feed = SyndicationFeed.Load(reader); var sotcPosts = from item in feed.Items select new SOTCPost { Title = item.Title.Text, Date = item.PublishDate }; 

你有“feedEntryContent”和“lastUpdated”作为元素名称,但我认为你想要“标题”和“已发布”。

您得到“无结果”的原因是您选择的名称中的元素在文档中不存在。