返回首页

如何在Web站点中创建和使用Rss源

时间:2017-02-09 22:17来源:知行网www.zhixing123.cn 编辑:麦田守望者

Rss是将你Web站点的内容与其他人分享的标准方式。Rss代表着:Really Simple Syndication。它不过是一个标准化的XML标记,用于描述你想要分享的内容。因此Rss是一个在你的内容准备好被其他用户所消费时被广泛接受的格式。一些使用Rss的范例站点有:www.asp.net、weblogs.asp.net 和 www.dotnetbips.com 。Dotnetbips.com 通过 Rss 发布新添内容的列表,这个列表可能会被其他的站长放置在他们的站点或目录中。

Rss的格式

如同我之前提到的,Rss不过是有着一些特殊标签的XML标记。下面的标记展示了这样一个文档:

<rss version="2.0">
    <channel>
    <title>DotNetBips.com Latest Articles</title>
    <link>www.dotnetbips.com</link>
    <description>DotNetBips.com Latest Articles</description>
    <copyright>Copyright (C) DotNetBips.com. All rights reserved.</copyright>
    <generator>www.dotnetbips.com RSS Generator</generator>
    <item>
    <author>Bipin Joshi</author>
    <title>Using WebRequest and WebResponse</title>
    <link>http://www.dotnetbips.com/displayarticle.aspx?id=239</link>
    <description>Description here</description>
    <pubDate>Sun, 25 Jan 2004 12:00:00 AM GMT</pubDate>
    </item>
    </channel>
< /rss>

让我们仔细看看每一个标记:

  • <rss>:根结点,拥有一个version(版本)属性,最新版本是 2.0
  • <channel>:rss下的根结点,可以再次包含<channel>结点。<channel>结点可以进一步包含<title>,<link>,<item>结点。
  • <title>:代表Rss源的标题。
  • <link>:代表着提供Rss源的站点的URL。
  • <description>:关于这个Rss源的更多详细信息。
  • <copyright>:详细说明版权信息。
  • <generator>:说明产生这个Rss源的应用程序。
  • 除了上面的这些标签,还可以有一个或多个<item>标签。Item标签代表着你想要分享的实际条目。比如,文章、博客入口。每个<item>标记进一步包含下面这些子结点。

  • <title>:代表着这个条目的标题。比如:文章标题。
  • <author>:代表着这个条目的作者。比如:文章作者。
  • <link>:代表这个条目的URL。比如:文章的URL。
  • <description>:包含着这个条目的描述信息。比如:文章的摘要。
  • <pubDate>:这个标签包含着这个条目的发布日期。典型的日期格式是:Sun 28 Dec 2003 12:00:00 AM GMT.
  • 采用的方法

    OK,我们已经对Rss的格式做了了解,但是如何使用.Net生成Rss源?.Net有许多XML相关的类。我们将从这些类中使用XML Text Writer来生成 Rss源。但是我们应该开发出一个通用的解决方案以便在任何的web站点中都可以使用。这就意味着我们的代码必须独立于特定的数据库领域或者表。为了达到这个目的,我们将要在VS.NET中创建一个类库。我们Rss的<item>标记的数据源将采用一个Dataset,这个Dataset通常填充自数据库表。这个类将有下面的属性和方法。

  • 属性

  • Outputstream:一个源所投递到的stream对象。
  • RssTitle:代表<channel>标签下的<title>的特定值。
  • PublisherUrl:代表<channel>标签下的<link>标签。
  • Description:代表<channel>标签下的<description>值。
  • Copyright:代表<channel>标签下的<copyright>值。
  • Generator:代表<channel>标签下的<generator>值。
  • ItemSource:指定一个包含着item行的Dataset对象。
  • ItemTitleField:数据列,代表<item>标签下的<title>标签
  • ItemUrlField:数据列,代表<item>标签下的<link>标签。
  • ItemDescriptionField:数据列,代表<item>标签下的<description>标签。
  • ItemPublicationDateFiled:数据列,代表<item>标签下的<pubDate>标签。
  • ItemAuthor:数据列,代表<item>标签下的<author>标签。
  • 方法

  • PublishRss:这个静态方法将Rss标记写入到outputstream(输出流)中。
  • 下面列出的是上面这些属性和方法的完整程序清单。为了简单和快速地作个示范,我使用了公用字段,而没有使用属性。在实际的应用程序中,应该使用属性。

    using System;
    using System.IO;
    using System.Data;
    using System.Xml;
    using System.Collections.Generic;
    using System.Text;

    public class Rss {
        public Stream OutputStream;
        public string RssTitle;
        public string PublisherUrl;
        public string Description;
        public string Copyright;
        public string Generator;
        public DataSet ItemSource;
        public string ItemTitleField;
        public string ItemUrlField;
        public string ItemDescriptionField;
        public string ItemPublicationDateField;
        public string ItemAuthor;

        public static void PublishRss(Rss r){
           XmlTextWriter writer = new XmlTextWriter(r.OutputStream, Encoding.UTF8);
    writer.WriteStartDocument();
           writer.WriteStartElement("rss");
           writer.WriteAttributeString("version", "2.0");
           writer.WriteStartElement("channel");
           writer.WriteElementString("title", r.RssTitle);
           writer.WriteElementString("link", r.PublisherUrl);
           writer.WriteElementString("description", r.Description);
           writer.WriteElementString("copyright", r.Copyright);
           writer.WriteElementString("generator", r.Generator);

           foreach (DataRow row in r.ItemSource.Tables[0].Rows) {
               writer.WriteStartElement("item");
               writer.WriteElementString("author", row[r.ItemAuthor].ToString());
               writer.WriteElementString("title", row[r.ItemTitleField].ToString());
               writer.WriteElementString("link", row[r.ItemUrlField].ToString());
               writer.WriteElementString("description", row[r.ItemDescriptionField].ToString());
               writer.WriteElementString("pubDate", Convert.ToDateTime(row[r.ItemPublicationDateField]).ToString("dd MMM yyyy hh:mm:00 "));
               writer.WriteEndElement();
           }

           writer.WriteEndElement();
           writer.WriteEndElement();
           writer.Flush();
        }
    }

    NOTE:这里pubDate的日期格式很重要,当你按上面的代码对pubDate进行格式转换的时候,假如数据库中是 2007-9-14 9:58,那么在英文操作系统下,会转换成 “14 Sep 2007 9:58”,这个是没有问题的。但在中文操作系统下,就变成了 “14 九月 2007 9:58”。导致的结果就是在IE7中点开rss源的时候,发现日期没有显示。如果你不进行数据格式转换,简单的使用一个 ToString(),结果仍是如此。这里,我是写了一个方法,对它进行了格式转换:

    // ... 省略 ...
    writer.WriteElementString("pubDate", GetRssDate(row[r.ItemPublicationDateField]));
    // ... 省略 ...

    public static string GetRssDate(Object date) {
        DateTime rssDate = Convert.ToDateTime(date);
       string[] monthName = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

        StringBuilder sb = new StringBuilder();
        sb.Append(rssDate.Day);
        sb.Append(" ");
        sb.Append(monthName[Convert.ToInt32(rssDate.Month) - 1]);
        sb.Append(" ");
        sb.Append(rssDate.Year);
        sb.Append(" ");
        sb.Append(rssDate.ToLongTimeString());

        return sb.ToString();
    }

    我看到ToString()有一个重载了的方法,接受一个IFormatProvider类型的参数,这个应该是进行格式转换的标准方式,MSDN的范例有点长了,就没有研究下去。如果哪位朋友对这里有好的解决方法,可以在回复在评论中,Thanks。

    创建属性就像上面显示的那样容易。PublishRss()方法是我们这里关心的核心内容。我们创建了System.Xml.XmlTextWriter类的实例。这个类是撰写XML文档的快速方式。在这个例子中,我们传递进一个OutputStream对象,并确定编码(UTF-8)。然后我们开始写入这个文档的不同部分。我们使用XmlTextWriter类的下面这些方法。

  • WriteStartDocument():这个方法写入XML 1.0版本的声明。也就是:
  • <?xml version="1.0" encoding="utf-8"?>。当不写这个声明的时候,在FireFox中虽然可以订阅,但是看不到任何条目,也不能进行更新。IE7下正常。
  • WriteStartElement:这个方法写入指定标签的起始标记。
  • WriteAttributeString:这个方法为当前打开的标签写入属性。
  • WriteElementString:这个方法写入一个起始标记和一个结束标记,以及起始和结束标记之间的文本。
  • WriteEndElement:这个方法写入当前打开标记的结束标记。不需要在这里指明结束标记的名字,因为在每次嵌套的时候都会在内部(NOTE:属于底层机制)设定。
  • Flush:这个方法将所有缓存的output清出到目的位置。
  • 注意,你必须恰当地调用 WriteStartElement()和WriteEndElement()方法以生成格式良好的(well formed)XML 文档。

    创建Asp.Net Web窗体

    现在我们已经创建好了一个通用类,我们可以在我们的Web窗体中使用它。假设我们将以Rss源形式发布的数据存储在一个表格(Article)中,这个表格的结构如下:

  • Title           - Varchar(255)
  • Description     - Varchar(1000)
  • Url             - Varchar(255)
  • Author          - Varchar(50)
  • Pubdate         - DateTime
  • 以DataSet形式获取Table内容

    我们将在Asp.Net Web应用程序中创建一个Rss.aspx文件,在CodeBehind中创建一个 GetDataSet()方法。这个方法使用DataAdapter来填充一个Dataset。

    public DataSet GetDataSet() {
        SqlConnection conn = new SqlConnection("你的连接字符串");
        string sql = "Select * From Article Order By ArticleId Desc";
        SqlDataAdapter da = new SqlDataAdapter(sql,conn);
        DataSet ds = new DataSet();

        da.Fill(ds, "Article");
        return ds;
    }

    接着,我们创建一个Rss类的实例,设置它的各个属性,然后调用GetDataSet()方法获取DataSet对象。

    ------分隔线----------------------------
    标签(Tag):创建Rss源 使用Rss源
    ------分隔线----------------------------
    推荐内容
  • Laravel debug bar 调试利器

    一、简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显示调试及错...

  • 如何安装mysql mysql安装图解教程

    本文就是给吊丝程序员介绍的怎么安装mysql的教程一枚,追求高大尚的高帅福可以绕道而...

  • Windows 2008服务器使用Xampps 搭建环境完美整合mod

    一、Xampps Tomcat模块使用中需要jdk支持的安装方法: 由于jdk的包真心大 180MB, 也无...

  • PHP调试利器XDebug的安装与使用基础教程

    很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,虽然对于有较丰富开...

  • phpstorm创建编辑远程项目实现图解教程

    PhpStorm是一个编辑PHP代码的神器,应该说是目前世界上编辑PHP代码的最好用的IDE了吧...

  • PHP的一种实现基于遗传算法的组卷系统的代码

    遗传算法(Genetic Algorithm,简称GA)是一种模拟达尔文的遗传选择和自然淘汰的生物...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8娱乐官网手机版
  • Photoshop龙8娱乐官网手机版
  • 3DMAX龙8娱乐官网手机版
  • AutoCAD龙8娱乐官网手机版
  • CorelDRAW龙8娱乐官网手机版
  • Matlab龙8娱乐官网手机版
  • 其他龙8娱乐官网手机版
  • .Net龙8娱乐官网手机版
  • Asp龙8娱乐官网手机版
  • Php龙8娱乐官网手机版
  • Jsp龙8娱乐官网手机版
  • Ajax龙8娱乐官网手机版
  • Android教程
  • 其他龙8娱乐官网手机版
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影