反转RSS提要
这可能很奇怪,我们是否曾经遇到过想要按时间顺序阅读的博客?而且那个博客可能已经很老了,有几百个帖子。当我将此供稿添加到供稿阅读器(例如googlereader)时,最新的供稿会放在顶部,当我进一步向下滚动时,会出现较旧的帖子。如果我们想从头开始阅读,可能会感到沮丧。有读者这样做吗?或者,我想作为一个宠物项目来做(最好是在C#中),我应该怎么做呢?另外,有没有可用于RSS源的.NET库?我之前没有做过任何RSS feed编程。
编辑我想知道对此是否有任何技术限制。这是我遇到的一个有趣的问题,我认为可以通过编程解决。
解决方案
在Google阅读器中,当我们阅读供稿时,会出现一个"供稿设置..."菜单,其中包含以下选项:"按最新排序","按最早排序"。
文件夹在"文件夹设置..."菜单下具有相同的选项
无需编程。
我认为我们可能会遇到麻烦。许多RSS feed仅保留最新的10条左右的帖子,因此自博客开始以来,就无法从feed中提供较旧的数据。
使用任何语言,这都应该相当容易...我们需要做的就是将提要xml读取到DOM结构中(几乎所有语言,包括Chave a DomDocument类)
然后,我们应该能够简单地以相反的顺序遍历项目节点...
请参阅:http://msdn.microsoft.com/en-us/library/ms756177(VS.85).aspx
如前所述,根据rss提要,我们可能只会获得有限数量的商品。
在Google阅读器中,我们可以让它从最新到最旧或者从最旧到最新显示文件夹(提要)中的项目。为此,选择提要,选择"提要设置"下拉菜单,然后选择"按最旧的排序"。我不确定Google Reader可以追溯到多久以前,但自从它开始监视提要以来可能一直保持下去。
如果我们决定滚动自己的Capplication来执行此操作,则在当前版本的.NET Framework中,它非常简单。
查找System.ServiceModel.Syndication命名空间。该类具有与RSS和Atom提要相关的类。我最近编写了一些代码,这些代码使用这些类从数据库生成了一个提要,并将地理编码添加到了提要项中。我有一个同样的问题,我需要反转提要中项目的顺序,因为我的数据库查询以我希望用户看到的相反顺序返回它们。
我所做的只是将提要的SyndicationItem对象列表保存在我自己的" List <SyndicationItem>"数据结构中,直到将提要写入磁盘之前。然后我会做这样的事情:
private SyndicationFeed m_feed; private List<SyndicationItem> m_items; ...snip... m_items.Reverse(); m_feed.Items = m_items;