使用C#在.net中阅读rss feed的最佳方法


106

阅读RSS feed的最佳方法是什么?

我正在XmlTextReader实现这一目标。还有其他最佳方法吗?

XmlTextReader reader = new XmlTextReader(strURL);

DataSet ds = new DataSet();
ds.ReadXml(reader);

使用阅读RSS feed后XmlTextReader,有什么方法可以ListItem代替来填充数据DataSet

在此处输入图片说明

Answers:


176

添加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;
    ...                
}

13
这是小事。很棒和简洁。您还需要使用System.Xml。但这很明显。对于博客的网址是目前“ blogname.blogspot.com/feeds/posts/default ”(凌动1.0)和“ blogname.blogspot.com/feeds/posts/default?alt=rss ”为RSS 2.0。SyndicationItem项目具有您需要的所有项目属性。只需在Visual Studio调试器中检查对象并照亮即可。
secretwep

我们可以使用XmlTextReader代替xmlreader进行任何性能差异吗?

1
简短而甜美。谢谢!
Bogdan Doicin

8
对于.Net Core,要安装使用的NuGet软件包为System.ServiceModel.Syndication
adam0101

对于2019年,每当我尝试访问唯一的预发布版本时,它都会爆炸。
克拉伦斯

11

这是一篇过时的文章,但是如果像现在这样来到这里,可以节省一些人的时间,建议您看一下CodeHollow.FeedReader程序包,该程序包支持更广泛的RSS版本,更易于使用,并且看起来更可靠。https://github.com/codehollow/FeedReader



3

用这个 :

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);

        }



    }

0

更新:仅支持UWP- Windows Community Toolkit

现在有一种简单得多的方法。您可以使用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;
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.