阅读 RSS Feed 的最佳方式是什么?
我正在使用XmlTextReader
来实现这一目标。还有其他最好的办法吗?
XmlTextReader reader = new XmlTextReader(strURL);
DataSet ds = new DataSet();
ds.ReadXml(reader);
使用XmlTextReader
阅读 RSS提要之后,我是否可以将数据填充到ListItem
而不是DataSet
?
答案 0 :(得分:158)
在参考
中添加System.ServiceModel
使用SyndicationFeed
:
string url = "http://fooblog.com/feed";
XmlReader reader = XmlReader.Create(url);
SyndicationFeed feed = SyndicationFeed.Load(reader);
reader.Close();
foreach (SyndicationItem item in feed.Items)
{
String subject = item.Title.Text;
String summary = item.Summary.Text;
...
}
答案 1 :(得分:83)
System.ServiceModel.Syndication
命名空间有一些东西,即SyndicationFeed类。
答案 2 :(得分:8)
您正在寻找SyndicationFeed
class,这正是如此。
答案 3 :(得分:6)
这是一篇很老的帖子,但为了节省一些时间,如果你像我一样到达这里,我建议你看看 CodeHollow.FeedReader 包,它支持更广泛的RSS版本,更容易使用,看起来更健壮。 https://github.com/codehollow/FeedReader
答案 4 :(得分:2)
使用此:
private string GetAlbumRSS(SyndicationItem album)
{
string url = "";
foreach (SyndicationElementExtension ext in album.ElementExtensions)
if (ext.OuterName == "itemRSS") url = ext.GetObject<string>();
return (url);
}
protected void Page_Load(object sender, EventArgs e)
{
string albumRSS;
string url = "http://www.SomeSite.com/rss";
XmlReader r = XmlReader.Create(url);
SyndicationFeed albums = SyndicationFeed.Load(r);
r.Close();
foreach (SyndicationItem album in albums.Items)
{
cell.InnerHtml = cell.InnerHtml +string.Format("<br \'><a href='{0}'>{1}</a>", album.Links[0].Uri, album.Title.Text);
albumRSS = GetAlbumRSS(album);
}
}
答案 5 :(得分:0)
更新:仅支持UWP- Windows社区工具包
现在有一种更简单的方法。您可以使用RssParser类。示例代码如下。
public async void ParseRSS()
{
string feed = null;
using (var client = new HttpClient())
{
try
{
feed = await client.GetStringAsync("https://visualstudiomagazine.com/rss-feeds/news.aspx");
}
catch { }
}
if (feed != null)
{
var parser = new RssParser();
var rss = parser.Parse(feed);
foreach (var element in rss)
{
Console.WriteLine($"Title: {element.Title}");
Console.WriteLine($"Summary: {element.Summary}");
}
}
}
对于非UWP,请按照其他建议使用来自命名空间System.ServiceModel.Syndication
的联合组织。
public static IEnumerable <FeedItem> GetLatestFivePosts() {
var reader = XmlReader.Create("https://sibeeshpassion.com/feed/");
var feed = SyndicationFeed.Load(reader);
reader.Close();
return (from itm in feed.Items select new FeedItem {
Title = itm.Title.Text, Link = itm.Id
}).ToList().Take(5);
}
public class FeedItem {
public string Title {
get;
set;
}
public string Link {
get;
set;
}
}