Как читать RSS-поток StackOverflow, используя Linq для XML - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь прочитать RSS-поток переполнения стека, используя Linq to xml.Я не могу получить входные узлы, так как он возвращает пустой список.Это я уже пробовал, может ли кто-нибудь указать, что я делаю не так здесь?

Здесь я привязываюсь к представлению сетки:

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; }
}

1 Ответ

4 голосов
/ 27 января 2012

Вы не используете объявленную вами переменную пространства имен. Попробуйте использовать

RssFeed.Descendants(Snmp + "entry")

(И также для всех других мест, где вы ссылаетесь на определенные имена.)

Я не говорю, что это обязательно все того, что вам нужно исправить, но это самая очевидная проблема. Вам также следует рассмотреть возможность использования явных преобразований XElement и XAttribute вместо свойства Value, например

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

Я бы также рекомендовал вам уделять больше внимания отступам и постоянно использовать pascalCase при именовании локальных переменных. (Почему переменная пространства имен называется Snmp - это еще одна странность ... вырезать и вставить?)

...