【发布时间】:2009-09-17 19:25:21
【问题描述】:
我已经成功地使用"union" as described here 在一个 c# 项目中加入了两个 RSS 提要,但是我们有一个场景,我们可以有多达一百个 RSS 提要加入在一起。拥有这么多提要的最佳方式是什么?
【问题讨论】:
我已经成功地使用"union" as described here 在一个 c# 项目中加入了两个 RSS 提要,但是我们有一个场景,我们可以有多达一百个 RSS 提要加入在一起。拥有这么多提要的最佳方式是什么?
【问题讨论】:
我会使用 SelectMany()(此处通过 LINQ 显示)将提要扁平化为单个序列,然后使用 Distinct() 过滤掉您已经看到的重复项:
var feeds = new[] {
"http://stackoverflow.com/feeds/tag/silverlight",
"http://stackoverflow.com/feeds/tag/wpf"
};
var items = from url in feeds
from xr in XmlReader.Create(url).Use()
let feed = SyndicationFeed.Load(xr)
from i in feed.Items
select i;
var newFeed = new SyndicationFeed(items.Distinct());
Use() 是described here 的扩展方法,用于在阅读器使用后进行清理。您可能还需要定义自己的 IEqualityComparer<SyndicationItem> 以与 Distinct() 一起使用。
【讨论】:
要解决“节点已经属于另一个文档”的问题,只需从根节点获取内部 XML,并将其附加到聚合文档的内部 XML。
【讨论】: