· tech  · 4 min read

ASP.NET下生成和读取RSS

前段时间看msdn的教程了解了用xpath读取rss,或者用xsl来规范。前者的问题是局限性比较大只能读取全部内容不能customize,要是碰到rdf的就更要命了,而后者的问题是太复杂,google上虽然有很多code但是懒得看。

抓取XML来生成RSS
最近要做project,需要做rss。不得不完全的研究一下RSS了,发现现在asp.netRSS Toolkit这个东西,超级好用,但是只能够读取外部的RSS。不过部署有点不方便。需要把压缩包里面的RssToolkit.dll文件,放到GAC里面。(用gacutil –i RssToolkit.dll这条命令,不过我的msdos一开始却不认这个gacutil, 于是把这个找了出来,我的是在Microsoft Visual Studio 8\SDK\v2.0\Bin下面的,版本不同的vs可能稍微有不同)。搞定以后进入VS里面,在Toolbox里右击选择Choose Item,然后browser前面那个RssToolkit.dll文件。这样这个超级好用的rss toolkit就安装完成了。

通过网站内容生成RSS
不过这个东西却不是我想要的东西,研究了很久发现RSS toolkit无法读取网站的数据库或者页面内容来生成RSS。

勘误一下,RSS toolkit是可以根据数据库内容来生成rss的,下载包里面的例子5就是这样的,不过需要手动建loop, 好像不能绑到datalist,repeater什么的。

于是又google了很久,期间被一篇《为自己的网站添加RSS功能》的技术文章QJ了n遍,国内这种文章真是一大抄啊,而且没有啥技术含量。还是Scott那个老头牛,发现了他的一篇文章。很精彩,不过最后用的还是他的事例code. 直接放自己的网页上,稍微改改数据绑定就能用了。

程序代码 程序代码

// Set the content-type
Response.ContentType = “text/xml”;
Response.ContentEncoding = Encoding.UTF8;

// check to see if a cached version exists
if (Cache[“RssFeed”] == null)
{
   // build up the cache dynamically
   DataTable articleData = CreateDataSource();

   // Use an XmlTextWriter to write the XML data to a string…
   StringWriter sw = new StringWriter();
   XmlTextWriter writer = new XmlTextWriter(sw);

   // write out
   writer.WriteStartElement(“rss”);
   writer.WriteAttributeString(“version”, “2.0”);

   // write out
   writer.WriteStartElement(“channel”);

   // write out -level elements
   writer.WriteElementString(“title”, “Example RSS Feed Title”);
   writer.WriteElementString(“link”, “http://myWebSite.com/”);
   writer.WriteElementString(“description”,
                             “This is a demonstration RSS feed.”);
   writer.WriteElementString(“ttl”, “60”);

   // write out an  element for each of the first X articles
   const int RSS_ITEMS = 10;
   for (int i = 0; i < RSS_ITEMS; i++)
   {
      // write out
      writer.WriteStartElement(“item”);

      // write out -level information
      writer.WriteElementString(“title”,
                         articleData.Rows[i][“title”].ToString());
      writer.WriteElementString(“link”,
                  String.Format(“http://myWebSite.com/article.aspx?id={0}”,
                                       articleData.Rows[i][“articleID”]));
      writer.WriteElementString(“description”,
                         articleData.Rows[i][“synopsis”].ToString());
      writer.WriteElementString(“author”,
                         articleData.Rows[i][“author”].ToString());
      // use DateTimeFormatInfo “r” to use RFC 1123
      // date formatting (same as RFC 822)
      writer.WriteElementString(“pubDate”,
             ((DateTime) articleData.Rows[i][“dateAdded”]).ToString(“r”));

      // write out
      writer.WriteEndElement();
   }

   // write out
   writer.WriteEndElement();

   // write out
   writer.WriteEndElement();

   // save the string in the cache (cache for 1.5 hours)
   Cache.Insert(“RssFeed”, sw.ToString(), null,
                   DateTime.Now.AddHours(1.5), TimeSpan.Zero);

   writer.Close();
}            

// write out the cached value
Response.Write(Cache[“RssFeed”].ToString());

查看完整代码

非常需要注意的是在前台的aspx页面里面需要删除部分,不然IE会出错。而在后台的cs文件里面需要调用System.Data, System.IO, System.Xml, System.Text.

为了尊重知识产权,给一下原文链接:Syndicating Your Web Site’s Content with RSS and ASP.NET

    Share:
    Back to Blog