如何使用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; }
}

如何使用linq-to-xml读取stackoverflow rss提要

您没有使用您声明的名称空间变量。尝试使用

RssFeed.Descendants(Snmp + "entry")

(同样,对于所有其他地方,您指的是特定名称。)

我并不是说这一定是你需要解决的所有问题,但这是最明显的问题。您还应该考虑使用XElementXAttribute的显式转换,而不是Value属性,例如

CreatedDate = (DateTime) item.Element(Snmp +"published")

我还鼓励您更多地注意缩进,并在命名局部变量时始终使用pascalCase。(名称空间变量被称为Snmp的原因是另一个奇怪之处…剪切和粘贴?)