ฉันกำลังเขียนฟีด RSS เมื่อไม่นานมานี้
หลังจากแก้ไขหลายครั้ง โค้ดที่เกี่ยวข้องก็ถูกเขียนลงในคลาสที่แยกจากกัน
รู้สึกค่อนข้างสะดวกที่จะนำมาใช้ซ้ำ เลยเอามาโพสต์ให้ทุกคนได้ศึกษากัน
ต่อไปนี้เป็นคลาส RssBase.cs:
1ใช้ระบบ;
2ใช้ System.Collections.Generic;
3ใช้ระบบ.Xml;
4
5 เนมสเปซ MyMedia.Utilities
6{
7 RssBase คลาสสาธารณะ
8 {
9 ตัวสร้าง RssBase#ตัวสร้าง RssBase ของภูมิภาค
10 RssBase สาธารณะ (XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 RssBase สาธารณะ (XmlTextWriter rssWriter, bool hasMedia, IList <ItemInfo> รายการ)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = มีมีเดีย;
18 this.items = รายการ;
19}
20 #เขตแดน
ยี่สิบเอ็ด
22 [สามารถซีเรียลไลซ์ได้]
23 ItemInfo ชั้นปิดผนึกสาธารณะ
ยี่สิบสี่ {
25 ตัวสร้าง ItemInfo#ตัวสร้าง ItemInfo ภูมิภาค
26 ItemInfo สาธารณะ () { }
27 ItemInfo สาธารณะ (สตริง itemTitle, สตริง itemLink, สตริง itemDescription, สตริง itemPubDate, สตริง itemAuthor, สตริง itemGuid)
28 {
29 this.itemTitle = ชื่อรายการ;
30 this.itemLink = itemLink;
31 this.itemDescription = คำอธิบายรายการ;
32 this.item Author = itemAuthor;
33 this.itemGuid = itemGuid;
34 this.itemPubDate = itemPubDate;
35}
36 ItemInfo สาธารณะ (สตริง itemTitle, สตริง itemLink, สตริง itemDescription, สตริง itemPubDate, สตริง itemAuthor,
37 สตริง itemGuid, สตริง mediaContentUrl, สตริง mediaTitle, สตริง mediaDescription,
38 สตริง mediaThumbUrl, สตริง mediaThumbWidth, สตริง mediaThumbHeight, สตริง mediaAuthor)
39 {
40 this.itemTitle = ชื่อรายการ;
41 this.itemLink = itemLink;
42 this.itemDescription = คำอธิบายรายการ;
43 this.itemPubDate = itemPubDate;
44 this.item Author = itemAuthor;
45 this.itemGuid = itemGuid;
46 this.mediaContentUrl = mediaContentUrl;
47 this.mediaTitle = สื่อชื่อเรื่อง;
48 this.mediaDescription = สื่อคำอธิบาย;
49 this.mediaThumbUrl = สื่อThumbUrl;
50 this.mediaThumbWidth = สื่อThumbWidth;
51 this.mediaThumbHeight = สื่อThumbHeight;
52 this.mediaAuthor = สื่อผู้เขียน;
53}
54#สิ้นสุดภูมิภาค
55
56 ตัวแปรรายการภายใน#region ตัวแปรรายการภายใน
57 // ตัวแปรรายการ
58 itemTitle สตริงส่วนตัว;
59 itemLink สตริงส่วนตัว;
60 รายการสตริงส่วนตัวคำอธิบาย;
61 สตริงส่วนตัว itemPubDate = DateTime.Now.ToString("r");
62 สตริงส่วนตัว itemDateTaken = DateTime.Now.ToString();
63 รายการสตริงส่วนตัวผู้เขียน;
64 itemGuid สตริงส่วนตัว;
65 // ตัวแปรสื่อ
66 สื่อสตริงส่วนตัว MediaContentUrl;
67 MediaTitle สตริงส่วนตัว;
สื่อสตริงส่วนตัว 68 คำอธิบาย;
69 สื่อสตริงส่วนตัวThumbUrl;
70 สื่อสตริงส่วนตัวThumbWidth;
71 สื่อสตริงส่วนตัวThumbHeight;
72 สื่อสตริงส่วนตัวผู้เขียน;
73#เขตแดน
74
75 คุณสมบัติรายการ#ภูมิภาค คุณสมบัติรายการ
76 ItemTitle สตริงสาธารณะ
77 {
78 ชุด { itemTitle = ค่า;
79 รับ { ส่งคืน itemTitle;
80}
81 สตริงสาธารณะ ItemLink
82 {
83 ชุด { itemLink = ค่า }
84 รับ { ส่งคืน itemLink; }
85}
86 สตริงสาธารณะ ItemDescription
87 {
88 ชุด { itemDescription = ค่า;
89 รับ { ส่งคืนคำอธิบายรายการ }
90}
91 สตริงสาธารณะ ItemPubDate
92 {
93 ชุด { itemPubDate = ค่า;
94 รับ { คืน itemPubDate;
95 }
96 สตริงสาธารณะ ItemDateTaken
97 {
98 ชุด { itemDateTaken = ค่า;
99 รับ { คืน itemDateTaken;
100}
101 สตริงสาธารณะ ItemAuthor
102 {
103 ชุด { itemAuthor = ค่า;
104 รับ { ส่งคืน itemAuthor;
105 }
106 สตริงสาธารณะ ItemGuid
107 {
108 ชุด { itemGuid = ค่า;
109 รับ { ส่งคืน itemGuid;
110 }
111 สตริงสาธารณะ MediaContentUrl
112 {
113 ชุด { mediaContentUrl = ค่า;
114 รับ { กลับ mediaContentUrl;
115 }
116 MediaTitle สตริงสาธารณะ
117 {
118 ชุด { mediaTitle = ค่า }
119 รับ { กลับ mediaTitle;
120 }
121 สตริงสาธารณะ MediaDescription
122 {
123 ชุด { mediaDescription = ค่า;
124 รับ { ส่งคืนคำอธิบายสื่อ }
125 }
126 สตริงสาธารณะ MediaThumbUrl
127 {
128 ชุด { mediaThumbUrl = ค่า;
129 รับ { กลับ mediaThumbUrl;
130 }
131 สตริงสาธารณะ MediaThumbWidth
132 {
133 ชุด { mediaThumbWidth = ค่า;
134 รับ { กลับ mediaThumbWidth;
135 }
136 สตริงสาธารณะ MediaThumbHeight
137 {
138 ชุด { mediaThumbHeight = ค่า;
139 รับ { กลับ mediaThumbHeight;
140 }
141 สตริงสาธารณะ MediaAuthor
142 {
143 ชุด { mediaAuthor = ค่า;
144 รับ { ส่งคืน mediaAuthor;
145 }
146 #สิ้นสุดภูมิภาค
147
148 }
149
150 สตริง Const#สตริง Const ของภูมิภาค
151 สตริง const ส่วนตัว TITLE = "MyMedia RSS";
152 สตริง const ส่วนตัว XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 สตริง const ส่วนตัว XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 สตริง const ส่วนตัว LINK = " http://www.MyWii.com.au/ ";
155 สตริง const ส่วนตัว DESCRIPTION = "คำอธิบาย";
156 สตริง const ส่วนตัว LANGUAGE = "en-us";
157 สตริง const ส่วนตัว COPYRIGHT = "ลิขสิทธิ์ 2006";
158 สตริง const ส่วนตัว GENERATOR = "MyMedia RSS Generator";
159 สตริง const ส่วนตัว IMAGE_URL = " 160 สตริง const ส่วนตัว IMAGE_TITLE = "MyWii";
161 สตริง const ส่วนตัว IMAGE_LINK = " http://www.MyWii.com.au ";
162 สตริงส่วนตัว PUB_DATE = DateTime.Now.ToString("r");
163 สตริงส่วนตัว LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165#endregion
166
167 ตัวแปรสมาชิกภายใน #region ตัวแปรสมาชิกภายใน
168 XmlTextWriter rssWriter ส่วนตัว;
169 บูลส่วนตัว hasMedia;
170 รายการ IList <ItemInfo> ส่วนตัว
171#เขตแดน
172
173 คุณสมบัติ#คุณสมบัติภูมิภาค
174 XmlTextWriter RssWriter สาธารณะ
175 {
176 ชุด { rssWriter = ค่า;
177 รับ { กลับ rssWriter;
178 }
179 บูลสาธารณะ HasMedia
180 {
181 ชุด { hasMedia = ค่า }
182 รับ { ส่งคืน hasMedia;
183}
184 รายการ IList <ItemInfo> สาธารณะ
185 {
186 ชุด { รายการ = มูลค่า }
187 รับ { คืนสินค้า }
188 }
189
190#endregion
191
192 วิธีการส่วนตัว#ภูมิภาค วิธีการส่วนตัว
193
194 โมฆะส่วนตัว WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("เวอร์ชัน", "2.0");
199 rssWriter.WriteAttributeString("xmlns:สื่อ", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // เขียนในช่องบล็อก
203 rssWriter.WriteStartElement("ช่อง");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("ชื่อ", TITLE);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("ลิงก์", LINK);
208 rssWriter.WriteString("n ");
209 rssWriter.WriteElementString("คำอธิบาย", คำอธิบาย);
210 rssWriter.WriteString("n ");
211 rssWriter.WriteElementString("pubDate", PUB_DATE);
212 rssWriter.WriteString("n ");
213 rssWriter.WriteElementString("lastBuildDate", LAST_BUILD_DATE);
214 rssWriter.WriteString("n ");
215 rssWriter.WriteElementString("ภาษา", ภาษา);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("ลิขสิทธิ์", ลิขสิทธิ์);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("เครื่องกำเนิดไฟฟ้า", เครื่องกำเนิดไฟฟ้า);
220 rssWriter.WriteString("n ");
221 // เขียนในบล็อกรูปภาพ
222 rssWriter.WriteStartElement("รูปภาพ");
223 rssWriter.WriteString("n ");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n ");
226 rssWriter.WriteElementString("ชื่อ", IMAGE_TITLE);
227 rssWriter.WriteString("n ");
228 rssWriter.WriteElementString("ลิงก์", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232 }
233
234 /***//// <สรุป>
235 /// เขียนในรายการ
236 /// </สรุป>
237 โมฆะส่วนตัว WriteItem (รายการ ItemInfo)
238 {
239 // เขียนใน item block
240 rssWriter.WriteStartElement("รายการ");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("ชื่อ", item.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("ลิงก์", item.ItemLink);
245 rssWriter.WriteString("n ");
246
247 rssWriter.WriteStartElement("คำอธิบาย");
248 rssWriter.WriteString("n ");
249 rssWriter.WriteCData(รายการ.คำอธิบายรายการ);
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("ผู้เขียน", item.ItemAuthor);
259 rssWriter.WriteString("n ");
260 rssWriter.WriteStartElement("guid");
261 rssWriter.WriteAttributeString("isPermaLink", "เท็จ");
262 rssWriter.WriteString(รายการ ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // เขียนรายการสื่อที่นี่
267
268 }
269
270 /***//// <สรุป>
271 /// เขียนลงในรายการสื่อ
272 /// </สรุป>
273 /// <param name="item">รายการข้อมูลรายการ</param>
274 โมฆะส่วนตัว WriteItemMedia (รายการ ItemInfo)
275 {
276 // เขียนในสื่อ
277 rssWriter.WriteString("n ");
278 rssWriter.WriteStartElement("สื่อ:เนื้อหา");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("ประเภท", "รูปภาพ/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("n ");
283 rssWriter.WriteElementString("media:title", item.MediaTitle);
284 rssWriter.WriteString("n ");
285 rssWriter.WriteStartElement("สื่อ:ข้อความ");
286 rssWriter.WriteAttributeString("ประเภท", "html");
287 rssWriter.WriteString(รายการ MediaDescription);
288 rssWriter.WriteEndElement();
289 rssWriter.WriteString("n ");
290 rssWriter.WriteStartElement("สื่อ: รูปขนาดย่อ");
291 rssWriter.WriteAttributeString("url", item.MediaThumbUrl);
292 rssWriter.WriteAttributeString("ความสูง", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("ความกว้าง", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("สื่อ:เครดิต");
297 rssWriter.WriteAttributeString("บทบาท", "ช่างภาพ");
298 rssWriter.WriteString(รายการ MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /***//// <สรุป>
305 /// ปิดองค์ประกอบรายการ
306 /// </สรุป>
307 โมฆะส่วนตัว WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 //////// <สรุป>
315 /// ปิดองค์ประกอบทั้งหมด
316 /// </สรุป>
317 โมฆะส่วนตัว WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325#endregion
326
327 /***//// <สรุป>
328 /// เขียนฟีด RSS
329 /// </สรุป>
330 โมฆะสาธารณะ WriteRSS()
331 {
332 เขียนบทนำ();
333 foreach (ข้อมูล ItemInfo ในรายการ)
334 {
335 รายการเขียน (ข้อมูล);
336 ถ้า (มีสื่อ)
337 WriteItemMedia (ข้อมูล);
338 เขียนรายการสิ้นสุด();
339 }
340 เขียนสิ้นสุด();
341 }
342 }
343}
จากนั้นใช้คลาส FeedBase.cs เพื่อเรียกวิธีการและคุณสมบัติในคลาส RssBase ด้านบน รหัสมีดังนี้ (ไฟล์นี้มีการเปลี่ยนแปลง หากคุณต้องการคอมไพล์ คุณต้องทำการแก้ไขที่เกี่ยวข้อง)
1โดยใช้ System.Collections.Generic;
2โดยใช้ระบบการกำหนดค่า;
3ใช้ระบบข้อมูล;
4ใช้ระบบข้อความ;
5ใช้ระบบ.เว็บ;
6ใช้ System.Web.UI;
7ใช้ระบบ.Xml;
8
9
10FeedBase คลาสสาธารณะ : หน้า
11{
12 โมฆะสาธารณะ GenerateRss()
13 {
14
15 รายการ IList<RssBase.ItemInfo> = รายการใหม่<RssBase.ItemInfo>();
16
17 // เติมรายการ
18 foreach (แถว DataRow เป็นแถว)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), แถว[ "ผู้เขียน"].ToString(), "guid");
21 รายการเพิ่ม(รายการ);
ยี่สิบสอง }
ยี่สิบสาม
24 XmlTextWriter xmlWriter = XmlTextWriter ใหม่ (Response.OutputStream,
25 การเข้ารหัส UTF8);
26
27 RssBase rssBase = RssBase ใหม่ (xmlWriter, false, รายการ);
28 rssBase.WriteRSS();
29
30 xmlWriter.ฟลัช();
31 xmlWriter.ปิด();
32
33 Response.ContentEncoding = การเข้ารหัส UTF8;
34 Response.ContentType = "ข้อความ/xml";
35 Response.Cache.SetCacheability(HttpCacheability.สาธารณะ);
36
37 การตอบสนองสิ้นสุด();
38 }
39
40}
41
42
สุดท้าย เพียงสร้างไฟล์ feed.aspx ใหม่ สืบทอดคลาส FeedBase และเรียกใช้เมธอด GenerateRss() ในคลาสนี้เพื่อสร้าง RSS Feed ที่คุณต้องการได้อย่างง่ายดาย :)
หากคุณมีข้อเสนอแนะหรือแนวคิดใด ๆ โปรดฝากข้อความไว้!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html