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

时间:2012-05-01 14:49:21

标签: c# rss xmltextreader

阅读 RSS Feed 的最佳方式是什么?

我正在使用XmlTextReader来实现这一目标。还有其他最好的办法吗?

XmlTextReader reader = new XmlTextReader(strURL);

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

使用XmlTextReader阅读 RSS提要之后,我是否可以将数据填充到ListItem而不是DataSet

enter image description here

6 个答案:

答案 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类。

这是一个相当简单的例子。 http://blogs.msdn.com/b/steveres/archive/2008/01/20/using-syndicationfeed-to-displaying-photos-from-spaces-live-com.aspx

答案 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;
    }
}