Câu hỏi cũ, nhưng nó xứng đáng là câu trả lời.
Có là một cách tương đối đơn giản để xác định xem bạn có nguồn cấp dữ liệu RSS hay Atom hay không. Nó đòi hỏi phải đọc, hoặc cố đọc tài liệu.
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;
}
}
xem tôi đã nghĩ và thấy một ví dụ khác về điều này, nhưng tôi không nhớ tại sao tôi không thích nó. Cách đây rất lâu, và điều này hoạt động, vì vậy hãy xem xét câu trả lời này tốt nhất, cảm ơn :) – SelAromDotNet
Ok vì vậy khi tôi thử nguồn cấp dữ liệu này (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2) thuộc loại Atom 2.0, mã của bạn không hoạt động vì dòng atom.CanRead (reader) trả về false. Giải pháp ở đây để xử lý Atom Ver là gì. 2.0? – Marko
Nó không phải là nguyên tử 2.0, theo như tôi biết. Có vẻ với tôi như là thức ăn đó bị hỏng. Nó có rác trong đó. Để giải quyết vấn đề này, tôi khuyên bạn nên sửa nguồn cấp dữ liệu trước khi thử đọc. Tôi chỉ thử điều này và nó làm việc cho tôi ở đây. – Cheeso