Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用彭博新闻的RSS提要_C#_Asp.net_Rss - Fatal编程技术网

C# 使用彭博新闻的RSS提要

C# 使用彭博新闻的RSS提要,c#,asp.net,rss,C#,Asp.net,Rss,我一直在寻找使用彭博rss源的解决方案 请看一下他们的XML 正如你所看到的,我想得到,但不知道如何得到 目前,我正在使用这个 List<FeedModel> list = new List<FeedModel>(); XmlReader reader = XmlReader.Create(rssUri); SyndicationFeed feed = SyndicationFeed.Load(reader); var feedItems = from item in

我一直在寻找使用彭博rss源的解决方案

请看一下他们的XML

正如你所看到的,我想得到,但不知道如何得到

目前,我正在使用这个

List<FeedModel> list = new List<FeedModel>();
XmlReader reader = XmlReader.Create(rssUri);

SyndicationFeed feed = SyndicationFeed.Load(reader);

var feedItems = from item in feed.Items
                select new FeedModel()
                {
                    Content = item.Summary.Text,
                    Id = item.Id,
                    PublishDate = item.PublishDate.DateTime.ToString(),
                    Title = item.Title.Text,
                    Link = item.Links.First().Uri.ToString()
                };
return feedItems.ToList();
我认为它工作得很好,但不是彭博社。请帮忙

额外信息


我是一名php开发人员,我需要用c语言为我的公司开发一个小模块。

下面是一个如何获得扩展属性的快速示例

用法

代码

显然,您可以根据需要将GenerateModelFromRssFeed方法设置为静态。

非常简单:

var doc = XDocument.Load("http://www.bloomberg.com/feed/podcast/on-the-economy.xml");

XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd";


var query = doc.Root.Elements("channel")
                .Elements("item")
                .Select(p => new BloomergFeeds
                {
                    Title = p.Element("title").Value,
                    Link = p.Element("link").Value,
                    Guid = p.Element("guid").Value,
                    PublishDate = p.Element("pubDate").Value,
                    Itunes = new Itunes
                    {
                        Author = p.Elements(itunes + "author").First().Value,
                        Subtitle = p.Elements(itunes + "subtitle").First().Value,
                        Summary = p.Elements(itunes + "summary").First().Value,
                        Duration = p.Elements(itunes + "duration").First().Value,
                        Keywords = p.Elements(itunes + "keywords").First().Value,
                    }
                }).ToList();


 public class BloomergFeeds
 {
     public string Title { get; set; }
     public string Link { get; set; }
     public string Guid { get; set; }
     public string PublishDate { get; set; }
     public Itunes Itunes { get; set; }
  }

  public class Itunes
  {
     public string Author { get; set; }
     public string Subtitle { get; set; }
     public string Summary { get; set; }
     public string Duration { get; set; }
     public string Keywords { get; set; }
  }
输出的格式很好:

显然,您可以更进一步,将关键字拆分为List的新属性,为link等添加新属性附件


享受。

您正在使用/瞄准哪个版本的.NET Framework?凯恩,谢谢。您介意解释一下如何使用ElementExtensions来获取数据吗?这个解决方案是可行的,但现在我需要用Plurpy获得yahoo weather rss,感谢这是一个很好的解决方案,因为我还是c语言的新手,我想如何在GridView中显示Itunes?我尝试了dataSource=query,但它没有显示Itunes部分:请将我的解决方案标记为答案。你在做WPF还是WinForms应用程序?呃。我正在做网页,也就是.aspx。顺便说一句,两个答案都有效,我不知道该选哪个>
public class FeedModel
{
    public string Id { get; set; }
    public string Content { get; set; }
    public DateTime PublishDate { get; set; }
    public string Title { get; set; }
    public string Link { get; set; }
    public string Summary { get; set; }
}

public IEnumerable<FeedModel> GenerateModelFromRssFeed(string feedUri)
{
    if (string.IsNullOrWhiteSpace(feedUri)) throw new ArgumentNullException(feedUri);

    using (var reader = XmlReader.Create(feedUri))
    {

        SyndicationFeed feed = SyndicationFeed.Load(reader);
        if (feed == null) throw new ApplicationException("Bloomberg feed cannot be downloaded");

        return from item in feed.Items
                select new FeedModel
                {
                    // this looks a little ugly but is necessary to check if the object (Summary) is null as an 
                    // exception will be thrown when trying to access a property on a null object
                    Content = item.Summary == null ? string.Empty : item.Summary.Text,
                    Id = item.Id,
                    PublishDate = item.Summary == null ? DateTime.MaxValue : item.PublishDate.DateTime,
                    Title = item.Title == null ? string.Empty : item.Title.Text,
                    Link = item.Links.Any() ? item.Links.First().Uri.ToString() : string.Empty,

                    // add in additional logic to test if the element extension is not null
                    Summary = item.ElementExtensions.FirstOrDefault(x => x != null && x.GetObject<XElement>().Name.LocalName.ToLowerInvariant() == "summary").GetObject<XElement>().Value
                };
    }
}
var doc = XDocument.Load("http://www.bloomberg.com/feed/podcast/on-the-economy.xml");

XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd";


var query = doc.Root.Elements("channel")
                .Elements("item")
                .Select(p => new BloomergFeeds
                {
                    Title = p.Element("title").Value,
                    Link = p.Element("link").Value,
                    Guid = p.Element("guid").Value,
                    PublishDate = p.Element("pubDate").Value,
                    Itunes = new Itunes
                    {
                        Author = p.Elements(itunes + "author").First().Value,
                        Subtitle = p.Elements(itunes + "subtitle").First().Value,
                        Summary = p.Elements(itunes + "summary").First().Value,
                        Duration = p.Elements(itunes + "duration").First().Value,
                        Keywords = p.Elements(itunes + "keywords").First().Value,
                    }
                }).ToList();


 public class BloomergFeeds
 {
     public string Title { get; set; }
     public string Link { get; set; }
     public string Guid { get; set; }
     public string PublishDate { get; set; }
     public Itunes Itunes { get; set; }
  }

  public class Itunes
  {
     public string Author { get; set; }
     public string Subtitle { get; set; }
     public string Summary { get; set; }
     public string Duration { get; set; }
     public string Keywords { get; set; }
  }