编辑: 向日葵8AS 2014-11-22

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 类的下面这些方法. z WriteStartDocument():这个方法写入 XML 1.0 版本的声明.也就是: .当不写这个声明的时候,在FireFox 中虽 然可以订阅,但是看不到任何条目,也不能进行更新.IE7 下正常. z WriteStartElement:这个方法写入指定标签的起始标记. z WriteAttributeString:这个方法为当前打开的标签写入属性. z WriteElementString: 这个方法写入一个起始标记和一个结束标记, 以及起始和结束标 记之间的文本. z WriteEndElement:这个方法写入当前打开标记的结束标记.不需要在这里指明结束标 记的名字,因为在每次嵌套的时候都会在内部(NOTE:属于底层机制)设定. z 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( 你的连接字符串 );

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题