如何使用linq-to-xml读取stackoverflow rss提要
本文关键字:rss 提要 stackoverflow 读取 何使用 linq-to-xml | 更新日期: 2023-09-27 18:21:39
我正在尝试使用Linq-to-xml读取堆栈溢出的rss提要。我无法获取入口节点,因为它正在返回空列表。到目前为止,我已经尝试过了,有人能指出我在这里做错了什么吗?
这里我绑定到网格视图:
private void StackoverflowFeedList()
{
grdFeedView.DataSource = StackoverflowUtils.GetStackOverflowFeeds();
grdFeedView.DataBind();
}
这是将获得所有馈送的方法:
public static IEnumerable<StackOverflowFeedItems> GetStackOverflowFeeds ()
{
XNamespace Snmp = "http://www.w3.org/2005/Atom";
XDocument RssFeed = XDocument.Load(@"http://stackoverflow.com/feeds");
var posts = from item in RssFeed.Descendants("entry")
select new StackOverflowFeedItems
{
QuestionID = item.Element(Snmp +"id").Value,
QuestionTitle = item.Element(Snmp +"title").Value,
AuthorName = item.Element(Snmp +"name").Value,
CategoryTag = (from category in item.Elements(Snmp +"category")
orderby category
select category.Value).ToList(),
CreatedDate = DateTime.Parse(item.Element(Snmp +"published").Value),
QuestionSummary = item.Element(Snmp +"summary").Value
};
return posts.ToList();
}
这就是我用来绑定的类:
public class StackOverflowFeedItems
{
public string QuestionID { get; set; }
public string QuestionTitle { get; set; }
public IEnumerable<string> CategoryTag { get; set; }
public string AuthorName { get; set; }
public DateTime CreatedDate { get; set; }
public string QuestionSummary { get; set; }
}
您没有使用您声明的名称空间变量。尝试使用
RssFeed.Descendants(Snmp + "entry")
(同样,对于所有其他地方,您指的是特定名称。)
我并不是说这一定是你需要解决的所有问题,但这是最明显的问题。您还应该考虑使用XElement
和XAttribute
的显式转换,而不是Value
属性,例如
CreatedDate = (DateTime) item.Element(Snmp +"published")
我还鼓励您更多地注意缩进,并在命名局部变量时始终使用pascalCase。(名称空间变量被称为Snmp
的原因是另一个奇怪之处…剪切和粘贴?)