Старый вопрос, но он заслуживает ответа.
: - относительно простой способ определить, есть ли у вас RSS или фид Atom. Это требует чтения или попытки прочитать документ.
public SyndicationFeed GetSyndicationFeedData(string urlFeedLocation)
{
XmlReaderSettings settings = new XmlReaderSettings
{
IgnoreWhitespace = true,
CheckCharacters = true,
CloseInput = true,
IgnoreComments = true,
IgnoreProcessingInstructions = true,
//DtdProcessing = DtdProcessing.Prohibit // .NET 4.0 option
};
if (String.IsNullOrEmpty(urlFeedLocation))
return null;
using (XmlReader reader = XmlReader.Create(urlFeedLocation, settings))
{
if (reader.ReadState == ReadState.Initial)
reader.MoveToContent();
// now try reading...
Atom10FeedFormatter atom = new Atom10FeedFormatter();
// try to read it as an atom feed
if (atom.CanRead(reader))
{
atom.ReadFrom(reader);
return atom.Feed;
}
Rss20FeedFormatter rss = new Rss20FeedFormatter();
// try reading it as an rss feed
if (rss.CanRead(reader))
{
rss.ReadFrom(reader);
return rss.Feed;
}
// neither?
return null;
}
}
см. Я думал и видел еще один пример этого, но я не помню, почему мне это не понравилось. Это было так давно, и это работает, поэтому рассмотрим этот лучший ответ, спасибо :) – SelAromDotNet
Хорошо, когда я пробую этот фид (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2), который имеет тип Atom 2.0, ваш код не работает, поскольку строка atom.CanRead (reader) возвращает false. Каково решение здесь для работы с Atom Ver. 2,0? – Marko
Это не атом 2.0, насколько я знаю. Мне кажется, что этот канал сломан. В нем есть мусор. Чтобы обойти это, я предлагаю исправить фид, прежде чем пытаться его прочитать. Я просто попробовал это, и это работает для меня здесь. – Cheeso