LINQ TO XML Parse RSS поток - PullRequest
       21

LINQ TO XML Parse RSS поток

0 голосов
/ 05 мая 2011

Я пытаюсь проанализировать RSS-канал, используя LINQ to Xml

Это RSS-лента: http://www.surfersvillage.com/rss/rss.xml

Мой код выглядит следующим образом, чтобы попытаться проанализировать

List<RSS> results = null;

XNamespace ns = "http://purl.org/rss/1.0/";
XNamespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

XDocument xdoc = XDocument.Load("http://www.surfersvillage.com/rss/rss.xml");

results = (from feed in xdoc.Descendants(rdf + "item")
           orderby int.Parse(feed.Element("guid").Value) descending
           let desc = feed.Element("description").Value
           select new RSS
           {
               Title = feed.Element("title").Value,
               Description = desc,
               Link = feed.Element("link").Value
           }).Take(10).ToList();

Чтобы проверить код, я поставил точку останова в первой строке запроса Linq и протестировал ее в промежуточном окне следующим образом:

xdoc.Element(ns + "channel");

Это работает и возвращает объекткак и ожидалось

я ввожу:

xdoc.Element(ns + "item");

выше сработало и вернул один объект, но я ищу все элементы

, поэтому я набрал ..

xdoc.Elements(ns + "item");

Это ничего не возвращает, даже если есть более 10 элементов, метод потомков тоже не работает и также возвращает ноль.

Может кто-нибудь дать мне несколько указателей на то, куда я идунеправильно?Я попытался заменить rdf перед пространством имен.

Спасибо

1 Ответ

5 голосов
/ 05 мая 2011

Вы ссылаетесь на неправильное пространство имен. Все элементы используют пространство имен по умолчанию, а не rdf, поэтому ваш код должен выглядеть следующим образом:

List<RSS> results = null;

XNamespace ns = "http://purl.org/rss/1.0/";
XDocument xdoc = XDocument.Load("http://www.surfersvillage.com/rss/rss.xml");
results = (from feed in xdoc.Descendants(ns + "item")
           orderby int.Parse(feed.Element(ns + "guid").Value) descending
           let desc = feed.Element(ns + "description").Value
           select new RSS
           {
               Title = feed.Element(ns + "title").Value,
               Description = desc,
               Link = feed.Element(ns + "link").Value
           }).Take(10).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...