Alte Frage, aber es verdient eine Antwort.
Dort ist eine relativ einfache Möglichkeit zu bestimmen, ob Sie einen RSS- oder einen Atom-Feed haben. Es erfordert Lesen oder versuchen, das Dokument zu lesen.
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;
}
}
sehe ich dachte und sah ein anderes Beispiel dafür, aber ich erinnere mich nicht, warum ich es nicht mochte. Es war so lange her, und das funktioniert, also halte das für die beste Antwort, danke :) – SelAromDotNet
Ok also, wenn ich diesen Feed probiere (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2) was vom Typ Atom 2.0 ist, funktioniert dein Code nicht, da die Zeile atom.CanRead (reader) false zurückgibt. Was ist die Lösung für Atom Ver? 2.0? – Marko
Es ist nicht Atom 2.0, soweit ich weiß. Es sieht für mich so aus, als wäre das Futter kaputt. Es hat Müll darin. Um es zu umgehen, würde ich vorschlagen, den Feed zu reparieren, bevor Sie versuchen, es zu lesen. Ich habe es gerade versucht und es funktioniert für mich hier. – Cheeso