【问题标题】:Best Way to read rss feed in .net Using C# [closed]使用 C# 在 .net 中阅读 rss 提要的最佳方式 [关闭]
【发布时间】:2012-05-11 01:55:48
【问题描述】:

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

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

XmlTextReader reader = new XmlTextReader(strURL);

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

使用XmlTextReader 阅读RSS 提要 后,有什么方法可以将数据填充到ListItem 而不是DataSet

【问题讨论】:

    标签: c# rss xmltextreader


    【解决方案1】:

    更新:这仅支持 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 中的 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      在引用中添加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;
          ...                
      }
      

      【讨论】:

      • 这是混蛋。很棒而且简洁。您还需要使用 System.Xml;但这很明显。对于 Blogger,URL 目前是“blogname.blogspot.com/feeds/posts/default”(Atom 1.0)和“blogname.blogspot.com/feeds/posts/default?alt=rss”对于 RSS 2.0。 SyndicationItem 项目具有您需要的所有项目属性。只需在 Visual Studio 调试器中检查对象并被照亮。
      • 我们可以使用 XmlTextReader 代替 xmlreader 有什么性能差异吗?
      • 对于 .Net Core,您要安装以使用它的 NuGet 包是 System.ServiceModel.Syndication
      • 对于 2019 年,每次我尝试访问唯一的预发布版本时都会爆炸。
      【解决方案3】:

      这是一篇旧文章,但如果你像我一样现在来到这里,为了节省人们一些时间,我建议你看看支持更广泛 RSS 的 CodeHollow.FeedReader 包版本,更容易使用,看起来更健壮。 https://github.com/codehollow/FeedReader

      【讨论】:

        【解决方案4】:

        使用这个:

        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】:

          您正在寻找 SyndicationFeed class,它正是这样做的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            • 2012-07-06
            • 2010-10-29
            • 1970-01-01
            • 2010-10-04
            • 1970-01-01
            相关资源
            最近更新 更多