结合两个联合供稿
时间:2020-03-05 18:57:42 来源:igfitidea点击:
合并feed和feed2的简单方法是什么?我希望将feed2中的项目添加到feed中。我也想避免重复,因为当同时用WPF和Silverlight标记问题时,提要中可能已经有项目。
Uri feedUri = new Uri("http://stackoverflow.com/feeds/tag/silverlight"); XmlReader reader = XmlReader.Create(feedUri.AbsoluteUri); SyndicationFeed feed = SyndicationFeed.Load(reader); Uri feed2Uri = new Uri("http://stackoverflow.com/feeds/tag/wpf"); XmlReader reader2 = XmlReader.Create(feed2Uri.AbsoluteUri); SyndicationFeed feed2 = SyndicationFeed.Load(reader2);
解决方案
回答
如果仅用于stackoverflow,则可以使用以下命令:
https://stackoverflow.com/feeds/tag/silverlight%20wpf
这将完成两个标签的并集。
对于更一般的解决方案,我不知道。我们可能必须手动迭代两个提要的元素,然后将它们结合在一起。我们可以比较<entry>的<id>元素以查看它们是否重复。
回答
好吧,一种可能是创建一个新的联合供稿,该供稿是第一个供稿的克隆,然后简单地遍历第二个供稿上的每个帖子,检查第一个供稿的存在,如果不存在则添加它。
类似于以下内容:
SyndicationFeed newFeed = feed.clone; foreach(SyndicationItem item in feed2.items) { if (!newFeed.contains(item)) newFeed.items.Add(item); }
也许可以做到。看起来"项目"是一个简单可编号的联合组织列表,因此没有理由不能简单地添加它们。
回答
我们可以使用LINQ简化将两个列表连接起来的代码(不要忘记将System.Linq放入用法中,如有必要,请在项目中引用System.Core)这是一个Main,它执行联合并将其打印到控制台(正确清理阅读器)。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.ServiceModel.Syndication; namespace FeedUnion { class Program { static void Main(string[] args) { Uri feedUri = new Uri("http://stackoverflow.com/feeds/tag/silverlight"); SyndicationFeed feed; SyndicationFeed feed2; using(XmlReader reader = XmlReader.Create(feedUri.AbsoluteUri)) { feed= SyndicationFeed.Load(reader); } Uri feed2Uri = new Uri("http://stackoverflow.com/feeds/tag/wpf"); using (XmlReader reader2 = XmlReader.Create(feed2Uri.AbsoluteUri)) { feed2 = SyndicationFeed.Load(reader2); } SyndicationFeed feed3 = new SyndicationFeed(feed.Items.Union(feed2.Items)); StringBuilder builder = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(builder)) { feed3.SaveAsRss20(writer); System.Console.Write(builder.ToString()); System.Console.Read(); } } } }