上次写过的使用linq to xml 快速创建自己的Rss 在博客园里收到(Jeffrey Zhao)的回复说:.net 3.5有System.Syndication类。 于是乎,开始翻阅Syndication的资料,到msdn上看到Syndication的介绍有NNNN多~脑袋都花掉了,呵呵
这里先附上一下msdn介绍Syndication的地址:
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.aspx
我下面的例子里呢用到的只有:SyndicationFeed和SyndicationItem
msdn相关地址:
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.syndicationfeed.aspx
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.syndicationitem.aspx
下面我们把上次的那个例子改一下:
private void createRss()
{
//还是从数据库里读数据
XXXXContext bd = new XXXXContext();
var sq = from p in bd.news orderby p.ID descending select new { p.ID, p.title, p.cont,p.in_date, p.n_type };
//这里用到了SyndicationFeed详细介绍请参见上面附的msdn地址SyndicationFeed有6个重载的方法,根据自己需要选择吧
SyndicationFeed feed = new SyndicationFeed("半途的Rss", "半途个人网站,包括个人相册", new Uri("http://www.bantool.cn"), "Bantool", DateTime.Now);
//这里可以添加feed的各种属性,如:Authors、Copyright、ImageUri等等,具体请参考msdn上SyndicationFeed详细介绍,这里只是为了改造一下上次的例子就不再写具体的属性了
//举个例子吧
feed.Authors.Add(new SyndicationPerson("[email protected]", "WeiYuan", "http://www.bantool.cn"));
//list用来存放SyndicationItem
List<SyndicationItem> items = new List<SyndicationItem>();
//循环添加item 博客园里(Juzz Pig(橘子&猪) )回复说的XmlSerializer ser = new XmlSerializer(typeof(sq)); ser.Serialize(Response.OutputStream, sq); 这个我还没有研究,暂时先用foreach吧
foreach (var p in sq)
{
//这里用到SyndicationItem,详细介绍还是看msdn吧,他有4个方法重载
SyndicationItem item = new SyndicationItem(p.title, p.cont, new Uri("http://www.bantool.cn/new" + p.ID + ".bantool"), p.ID.ToString(), DateTime.Now);
//这里也是可以添加item的各个属性,如类别,作者等
item.Categories.Add(new SyndicationCategory(p.n_type));
//把item添加到list里
items.Add(item);
}
feed.Items = items;
//如果是aspx页面输出
Response.ContentType = "text/xml";
Rss20FeedFormatter rssfm = new Rss20FeedFormatter(feed);
XmlWriter rssWriter = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);
rssfm.WriteTo(rssWriter);
rssWriter.Close();
//如果是写入文件
//XmlWriter rssWriter = XmlWriter.Create("rss.xml");
//Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
//rssFormatter.WriteTo(rssWriter);
//rssWriter.Close();
}
这样就完成了除去注释只有几行代码,很简便的,新的东西就是强大~呵呵
另外,msdn里还有关于Syndication 序列化为ATOM的例子,其实用法是一样,只是在输出的时候有写不同,这里粘贴一段atom输出到xml的代码(来自msdn)
XmlWriter atomWriter = XmlWriter.Create("atom.xml");
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
atomFormatter.WriteTo(atomWriter);
atomWriter.Close();
其实只有一行代码不同而已
下面呢再贴一段关于atom的介绍,呵呵,不是额废话多,是想能看到这篇帖子的人就顺便都了解一下,免得以后用到了再去翻资料
ATOM是一种订阅网志的格式。它与RSS相比来讲,有更大的弹性。
atom 是一种基于XML的文档格式以及基于HTTP的协议,它被站点和客户工具等用来聚合网络内容,包括weblog和新闻标题等,它借鉴了各种版本RSS的使用经验
Atom正走在通往IETF标准的路上,在这之前,Atom的最后一个版本是"Atom 0.3",并且已经被相当广泛的聚合工具使用在发布和使用(consuming)上。值得一提的是, Blogger和Gmail这两个由Google提供的服务正在使用Atom.
Atom是开发一个新的网志摘要格式以解决目前 RSS 存在的问题(混乱的版本号,不是一个真正的开放标准,表示方法的不一致,定义贫乏等等)。Atom 希望提供一个清晰的版本以解决每个人的需要,其设计完全不依赖于供货商,任何人都可以对之进行自由扩展,完整详细说明。
当今许多 Blog 引擎已经支持当前的摘要格式。Figure 3 是一个Atom 0.3 提要例子,它与前述 Figure 1 及 Figure 2 RSS 提要等同。注意 Atom 提要用名字空间限定的,但它不使用 RDF。这使得 Atom 和 RSS 1.0 及 RSS 2.0 在某些地方有相似之处。Atom 在未来是否能被接受,人们拭目以待。
除了定义新的摘要格式之外,Atom 还希望定义一个标准的档案文件格式和一个标准的网志编辑 API(Atom API)。有关 Atom 详细规范以及其它 Atom 资源请访问 The Atom Project。
使用linq to xml 快速创建自己的Rss:
www.bantool.cn/news33.bantool