Beste manier om RSS-feed in .net te lezen met C#

Wat is de beste manier om RSS-feedste lezen?

Ik gebruik XmlTextReaderom dit te bereiken. Is er een andere beste manier om dit te doen?

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

Na het lezen van de RSS-feedmet behulp van XmlTextReader, is er een manier waarop ik gegevens kan invullen in ListItemin plaats van DataSet?


Antwoord 1, autoriteit 100%

Voeg System.ServiceModeltoe aan referenties

Met behulp van 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;
    ...                
}

Antwoord 2, autoriteit 6%

Dit is een oud bericht, maar om mensen wat tijd te besparen als je hier nu komt zoals ik deed, raad ik je aan om het CodeHollow.FeedReader-pakket te bekijken dat een breder scala aan RSS ondersteunt versies, is gemakkelijker te gebruiken en lijkt robuuster. https://github.com/codehollow/FeedReader


Antwoord 3, autoriteit 5%

U zoekt de klasse SyndicationFeed, wat precies dat doet.


Antwoord 4, autoriteit 2%

Gebruik dit:

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

Antwoord 5

Update: dit wordt alleen ondersteund met UWP – Windows Community Toolkit

Er is nu een veel gemakkelijkere manier. U kunt de RssParserklasse. De voorbeeldcode wordt hieronder gegeven.

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

Gebruik voor niet-UWP de Syndication uit de naamruimte System.ServiceModel.Syndicationzoals anderen suggereerden.

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

Other episodes