Cách tốt nhất để đọc nguồn cấp dữ liệu rss trong .net Sử dụng C #


106

Cách tốt nhất để đọc nguồn cấp RSS là gì?

Tôi đang sử dụng XmlTextReaderđể đạt được điều này. Có cách nào khác tốt nhất để làm điều đó không?

XmlTextReader reader = new XmlTextReader(strURL);

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

Sau khi đọc nguồn cấp dữ liệu RSS bằng cách sử dụng XmlTextReader, có cách nào tôi có thể điền dữ liệu ListItemvào DataSetkhông?

nhập mô tả hình ảnh ở đây

Câu trả lời:


176

Thêm System.ServiceModeltài liệu tham khảo

Sử dụng 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
Đây là schizzle. Tuyệt vời và ngắn gọn. Bạn cũng cần phải sử dụng System.Xml; nhưng điều đó khá rõ ràng. Đối với Blogger, url hiện là " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) và " blogname.blogspot.com/feeds/posts/default?alt=rss " cho RSS 2.0. Mục SyndicationItem có tất cả các thuộc tính mục mà bạn cần. Chỉ cần kiểm tra đối tượng trong trình gỡ lỗi Visual Studio và được chiếu sáng.
secretwep

chúng ta có thể sử dụng XmlTextReader thay vì xmlreader bất kỳ sự khác biệt hiệu suất nào không?
Dragon

1
Ngắn và ngọt. Cảm ơn bạn!
Bogdan Doicin

8
Đối với Net Core, gói NuGet bạn muốn cài đặt để sử dụng này làSystem.ServiceModel.Syndication
adam0101

cho năm 2019, điều này sẽ nổ tung mỗi khi tôi cố gắng truy cập phiên bản duy nhất được phát hành trước.
Clarence

11

Đây là một bài đăng cũ, nhưng để tiết kiệm thời gian cho mọi người nếu bạn đến đây ngay bây giờ như tôi đã làm, tôi khuyên bạn nên xem gói CodeHollow.FeedReader hỗ trợ nhiều phiên bản RSS hơn, dễ sử dụng hơn và có vẻ mạnh mẽ hơn . https://github.com/codehollow/FeedReader



3

Dùng cái này :

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

Cập nhật: Điều này chỉ hỗ trợ với UWP - Bộ công cụ cộng đồng Windows

Có một cách dễ dàng hơn bây giờ. Bạn có thể sử dụng lớp RssParser . Mã mẫu được đưa ra bên dưới.

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

Đối với những người không phải UWP, hãy sử dụng Phân phối từ không gian tên System.ServiceModel.Syndicationnhư những người khác đề xuất.

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;
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.