当前位置:首页 > 使用linq to xml 快速创建自己的Rss 之二 Syndication篇

使用linq to xml 快速创建自己的Rss 之二 Syndication篇

点击次数:1428  更新日期:2010-12-30
\n

上次写过的使用linq to xml 快速创建自己的Rss 在博客园里收到(Jeffrey Zhao)的回复说:.net 3.5有System.Syndication类。 于是乎,开始翻阅Syndication的资料,到msdn上看到Syndication的介绍有NNNN多~脑袋都花掉了,呵呵


\n

这里先附上一下msdn介绍Syndication的地址:


\n

http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.aspx


\n

我下面的例子里呢用到的只有:SyndicationFeed和SyndicationItem


\n

msdn相关地址:


\n

http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.syndicationfeed.aspx


\n

http://msdn.microsoft.com/zh-cn/library/system.servicemodel.syndication.syndicationitem.aspx


\n

下面我们把上次的那个例子改一下:


\n


\n

private void createRss()


\n

{


\n

//还是从数据库里读数据


\n

XXXXContext bd = new XXXXContext();


\n

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 };


\n

//这里用到了SyndicationFeed详细介绍请参见上面附的msdn地址SyndicationFeed有6个重载的方法,根据自己需要选择吧


\n

SyndicationFeed feed = new SyndicationFeed(“半途的Rss”, “半途个人网站,包括个人相册”, new Uri(“http://www.bantool.cn”), “Bantool”, DateTime.Now);


\n

//这里可以添加feed的各种属性,如:Authors、Copyright、ImageUri等等,具体请参考msdn上SyndicationFeed详细介绍,这里只是为了改造一下上次的例子就不再写具体的属性了


\n

//举个例子吧


\n

feed.Authors.Add(new SyndicationPerson(“ziie@tom.com”, “WeiYuan”, “http://www.bantool.cn”));


\n

//list用来存放SyndicationItem


\n

List<SyndicationItem> items = new List<SyndicationItem>();


\n

//循环添加item 博客园里(Juzz Pig(橘子&猪) )回复说的XmlSerializer ser = new XmlSerializer(typeof(sq)); ser.Serialize(Response.OutputStream, sq); 这个我还没有研究,暂时先用foreach吧


\n

foreach (var p in sq)


\n

{


\n

//这里用到SyndicationItem,详细介绍还是看msdn吧,他有4个方法重载


\n

SyndicationItem item = new SyndicationItem(p.title, p.cont, new Uri(“http://www.bantool.cn/new” + p.ID + “.bantool”), p.ID.ToString(), DateTime.Now);


\n

//这里也是可以添加item的各个属性,如类别,作者等


\n

item.Categories.Add(new SyndicationCategory(p.n_type));


\n

//把item添加到list里


\n

items.Add(item);


\n

}


\n

feed.Items = items;


\n

//如果是aspx页面输出


\n

Response.ContentType = “text/xml”;


\n

Rss20FeedFormatter rssfm = new Rss20FeedFormatter(feed);


\n

XmlWriter rssWriter = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);


\n

rssfm.WriteTo(rssWriter);


\n

rssWriter.Close();


\n

//如果是写入文件


\n

//XmlWriter rssWriter = XmlWriter.Create(“rss.xml”);


\n

//Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);


\n

//rssFormatter.WriteTo(rssWriter);


\n

//rssWriter.Close();


\n

}


\n

这样就完成了除去注释只有几行代码,很简便的,新的东西就是强大~呵呵


\n

另外,msdn里还有关于Syndication 序列化为ATOM的例子,其实用法是一样,只是在输出的时候有写不同,这里粘贴一段atom输出到xml的代码(来自msdn)


\n

XmlWriter atomWriter = XmlWriter.Create(“atom.xml”);


\n

Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);


\n

atomFormatter.WriteTo(atomWriter);


\n

atomWriter.Close();


\n

其实只有一行代码不同而已


\n

下面呢再贴一段关于atom的介绍,呵呵,不是额废话多,是想能看到这篇帖子的人就顺便都了解一下,免得以后用到了再去翻资料


\n

ATOM是一种订阅网志的格式。它与RSS相比来讲,有更大的弹性。


\n

atom 是一种基于XML的文档格式以及基于HTTP的协议,它被站点和客户工具等用来聚合网络内容,包括weblog和新闻标题等,它借鉴了各种版本RSS的使用经验


\n

Atom正走在通往IETF标准的路上,在这之前,Atom的最后一个版本是”Atom 0.3″,并且已经被相当广泛的聚合工具使用在发布和使用(consuming)上。值得一提的是, Blogger和Gmail这两个由Google提供的服务正在使用Atom.


\n

Atom是开发一个新的网志摘要格式以解决目前 RSS 存在的问题(混乱的版本号,不是一个真正的开放标准,表示方法的不一致,定义贫乏等等)。Atom 希望提供一个清晰的版本以解决每个人的需要,其设计完全不依赖于供货商,任何人都可以对之进行自由扩展,完整详细说明。


\n

当今许多 Blog 引擎已经支持当前的摘要格式。Figure 3 是一个Atom 0.3 提要例子,它与前述 Figure 1 及 Figure 2 RSS 提要等同。注意 Atom 提要用名字空间限定的,但它不使用 RDF。这使得 Atom 和 RSS 1.0 及 RSS 2.0 在某些地方有相似之处。Atom 在未来是否能被接受,人们拭目以待。


\n

除了定义新的摘要格式之外,Atom 还希望定义一个标准的档案文件格式和一个标准的网志编辑 API(Atom API)。有关 Atom 详细规范以及其它 Atom 资源请访问 The Atom Project。

上一篇:使用linq to xml 快速创建自己的Rss

来源:http://www.cnblogs.com/ziie

\n