233
234 /**//// <summary>
235 /// Write in items /?"
236 /// </summary>
237 private void WriteItem(ItemInfo item)
238 {
239 // Write in item block
240 rssWriter.WriteStartElement("item");
241 rssWriter.WriteString("\n ");
242 rssWriter.WriteElementString("title", item.ItemTitle);
243 rssWriter.WriteString("\n ");
244 rssWriter.WriteElementString("link", item.ItemLink);
245 rssWriter.WriteString("\n ");
246
247 rssWriter.WriteStartElement("description");
248 rssWriter.WriteString("\n ");
249 rssWriter.WriteCData(item.ItemDescription);
250 rssWriter.WriteString("\n ");
251 rssWriter.WriteEndElement();
252
253 rssWriter.WriteString("\n ");
254 rssWriter.WriteElementString("pubDate", item.ItemPubDate);
255 rssWriter.WriteString("\n ");
256 rssWriter.WriteElementString("dc:date.Taken", item.ItemDateTaken);
257 rssWriter.WriteString("\n ");
258 rssWriter.WriteElementString("author", item.ItemAuthor);
259 rssWriter.WriteString("\n ");
260 rssWriter.WriteStartElement("guid");
261 rssWriter.WriteAttributeString("isPermaLink", "false");
262 rssWriter.WriteString(item.ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // Write item media here
267
268 }
269
270 /**//// <summary>
271 /// Write in item media
272 /// </summary>
273 /// <param name="item">ItemInfo item</param>
274 private void WriteItemMedia(ItemInfo item)
275 {
276 // Write in media
277 rssWriter.WriteString("\n ");
278 rssWriter.WriteStartElement("media:content");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("type", "image/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("\n ");
283 rssWriter.WriteElementString("media:title", item.MediaTitle);
284 rssWriter.WriteString("\n ");
285 rssWriter.WriteStartElement("media:text");
286 rssWriter.WriteAttributeString("type", "HTML");
287 rssWriter.WriteString(item.MediaDescription);
288 rssWriter.WriteEndElement();
289 rssWriter.WriteString("\n ");
290 rssWriter.WriteStartElement("media:thumbnail");
291 rssWriter.WriteAttributeString("url", item.MediaThumbUrl);
292 rssWriter.WriteAttributeString("height", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("width", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("\n ");
296 rssWriter.WriteStartElement("media:credit");
297 rssWriter.WriteAttributeString("role", "photographer");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("\n ");
301
302 }
303
304 /**//// <summary>
305 /// Close item element
306 /// </summary>
307 private void WriteItemEnd()
308 {
309 rssWriter.WriteString("\n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("\n ");
312 }
313
314 /**//// <summary>
315 /// Close all the elements
316 /// </summary>
317 private void WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("\n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #endregion
326
327 /**//// <summary>
328 /// Write RSS feed
329 /// </summary>
330 public void WriteRSS()
331 {
332 WritePrologue();
333 foreach (ItemInfo info in items)
334 {
335 WriteItem(info);
336 if (hasMedia)
337 WriteItemMedia(info);
338 WriteItemEnd();
339 }
340 WriteEnd();
341 }
342 }
343}
然后使用一个FeedBase.cs类,调用上面的RssBase类中的方法和属性。代码如下。(该文件有改动,如要编译,需做相关修改)
1using System.Collections.Generic;
2using System.Configuration;
3using System.Data;
4using System.Text;
5using System.Web;
6using System.Web.UI;
7using System.XML;
8
9
10public class FeedBase : Page
11{
12 public void GenerateRss()
13 {
14
15 IList<RssBase.ItemInfo> items = new List<RssBase.ItemInfo>();
16
17 // Populate items.
18 foreach (DataRow row in rows)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row["Author"].ToString(), "guid");
21 items.Add(item);
22 }
23
24 XMLTextWriter XMLWriter = new XMLTextWriter(Response.OutputStream,
25 Encoding.UTF8);
26
27 RssBase rssBase = new RssBase(XMLWriter, false, items);
28 rssBase.WriteRSS();
29
30 XMLWriter.Flush();
31 XMLWriter.Close();
32
33 Response.ContentEncoding = Encoding.UTF8;
34 Response.ContentType = "text/XML";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 Response.End();
38 }
39
40}
41
42
最后,只要新建一个feed.ASPx文件,继承FeedBase类,调用该类中的GenerateRss()方法就可以轻松生成你所期望的RSS Feed :)
有什么建议和想法,请留言!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.HTML
()。








