Я писал общий класс для чтения RSS-каналов из различных источников и объединения в одну коллекцию объектов в VB.net.
По сути, функция - использование LINQ to XML - работает правильно, но у меня есть проблема, когда лента RSS, которую я пытаюсь прочитать, не содержит ни одного узла (как вы знаете, многие из них являются необязательными). Я хотел бы, чтобы возвращаемое значение было пустой строкой или ничего, но вместо этого я получаю обратно ошибку времени выполнения.
Я искал в интернете ту же проблему и обнаружил этот пост http://forums.asp.net/p/1351226/2762834.aspx#2762834, который, очевидно, объясняет обходной путь, но он не работает с моим кодом.
Меня также удивляют небольшие ресурсы, которые я нахожу по этой проблеме, поэтому мне интересно, если я даже поставлю вопрос в правильных терминах ...
После вы можете найти код:
Dim PostsEnum = From BlogPost In XMLSource.Descendants("item")
Order By DateTime.Parse(BlogPost.Element("pubDate").Value) Descending
Select New Post() With {
.Title = BlogPost.Element("title").Value,
.Link = BlogPost.Element("link").Value,
.Description = BlogPost.Element("description").Value,
.AuthorText = BlogPost.Element("author").Value,
.Category = (From tag In BlogPost.Descendants("category")
Select cat = tag.FirstNode.ToString).ToList,
.PubDate = DateTime.Parse(BlogPost.Element("pubDate").Value),
.GUID = BlogPost.Element("guid").Value
}
Я попробовал это на http://neatlydoc.codeplex.com/Project/ProjectRss.aspx, и это сработало, но следующий код сгенерирует исключение:
Dim PostsEnum = From BlogPost In XMLSource.Descendants("item")
Order By DateTime.Parse(BlogPost.Element("pubDate").Value) Descending
Select New Post() With {
.Title = BlogPost.Element("title").Value,
.Link = BlogPost.Element("link").Value,
.Description = BlogPost.Element("description").Value,
.AuthorText = BlogPost.Element("author").Value,
.Category = (From tag In BlogPost.Descendants("category")
Select cat = tag.FirstNode.ToString).ToList,
.PubDate = DateTime.Parse(BlogPost.Element("pubDate").Value),
.GUID = BlogPost.Element("guid").Value,
.Source = CType(BlogPost.Element("source").Value, String)
}
Любая помощь будет оценена.
Спасибо
Luca