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

来源:互联网 发布:赛默飞变色龙软件 编辑:程序博客网 时间:2024/05/01 09:31

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

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

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

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

我下面的例子里呢用到的只有:SyndicationFeedSyndicationItem

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地址SyndicationFeed6个重载的方法,根据自己需要选择吧

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

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

        //举个例子吧

        feed.Authors.Add(new SyndicationPerson("ziie@tom.com", "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)上。值得一提的是, BloggerGmail这两个由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 还希望定义一个标准的档案文件格式和一个标准的网志编辑 APIAtom API)。有关 Atom 详细规范以及其它 Atom 资源请访问 The Atom Project