I сильно подозревают, что генерируется исключение - но вы не можете сказать, потому что вы "обрабатываете" все исключения, возвращая пустой список, без записи того, чтоИсключением является или любой вид диагностики.Я бы лично убрал try / catch вообще: если что-то не так, зачем это скрывать?Если вы должны перехватить исключение, то перехватите определенных исключений и запишите их, чтобы вы знали, что произошло.
Ваш запрос также может быть значительно упрощен:
XDocument doc = XDocument.Load("atom.xml");
XNamespace ns = "http://www.w3.org/2005/Atom";
var entries = doc.Root
.Elements(ns + "entry")
.Select(item => new Item
{
FeedType = FeedType.Atom,
Content = (string) item.Element(ns + "content"),
Link = (string) item.Element(ns + "link").Attribute("href"),
PublishDate = (DateTime) item.Element(ns + "published"),
Title = (string) item.Element(ns + "title")
};
Обратите внимание, что теперь для Content и Title будет установлено значение null, если эти элементы не существуют;Измените на .Value
еще раз, если вы хотите, чтобы он вызвал исключение.Вы можете получить то же поведение для PublishDate
, приведя к DateTime?
вместо DateTime
, очевидно, после изменения типа свойства тоже.Обработка отсутствующих ссылок будет немного сложнее, но не так уж и плохо - дайте мне знать, если вам нужна помощь.
В принципе, я подозреваю, что это отсутствующий элемент - вполне возможно published
.Хотя будет легче выяснить, когда вы регистрируете (или не ловите) исключения.
РЕДАКТИРОВАТЬ: Учитывая ваш комментарий, похоже, что это не имеет абсолютно никакого отношения к тому, как вы обрабатываете XML- это загрузка XML, который вызывает проблему.Здесь важно не глотать исключения ...
Я не знаю, как предоставить учетные данные при загрузке XML через XDocument.Load
- вам, возможно, придется использовать WebRequest
или WebClient
дляполучить данные, а затем проанализировать их с помощью XDocument.Load(Stream)
.