しばらく前に RSS フィードを書いていました。
いくつかの変更を行った後、関連するコードが別のクラスに書き込まれました。
再利用するとかなり便利な気がします。そこで、それを投稿して、みんなで一緒に勉強してみようと思いました。
RssBase.cs クラスは次のとおりです。
1システムを使用する。
2System.Collections.Generic を使用します。
3System.Xml を使用します。
4
5名前空間MyMedia.Utilities
6{
7 パブリック クラス RssBase
8 {
9 RssBase コンストラクター#region RssBase コンストラクター
10 パブリック RssBase(XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 個の public RssBase(XmlTextWriter rssWriter、bool hasMedia、IList<ItemInfo> items)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = アイテム;
19}
20 #エンドリージョン
21
22 [シリアライズ可能]
23 パブリックシールドクラスItemInfo
24 {
25 ItemInfo コンストラクタ#region ItemInfo コンストラクタ
26 パブリックItemInfo() { }
27 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor, string itemGuid)
28 {
29 this.itemTitle = アイテムタイトル;
30 this.itemLink = アイテムリンク;
31 this.itemDescription = itemDescription;
32 this.itemAuthor = itemAuthor;
33 this.itemGuid = itemGuid;
34 この.itemPubDate = itemPubDate;
35}
36 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor,
37 文字列 itemGuid、文字列 mediaContentUrl、文字列 mediaTitle、文字列 mediaDescription、
38 文字列mediaThumbUrl、文字列mediaThumbWidth、文字列mediaThumbHeight、文字列mediaAuthor)
39 {
40 this.itemTitle = アイテムタイトル;
41 this.itemLink = itemLink;
42 this.itemDescription = itemDescription;
43 この.itemPubDate = itemPubDate;
44 this.itemAuthor = itemAuthor;
45 this.itemGuid = itemGuid;
46 this.mediaContentUrl = メディアコンテンツUrl;
47 this.mediaTitle = メディアタイトル;
48 this.mediaDescription = メディア説明;
49 this.mediaThumbUrl = mediaThumbUrl;
50 this.mediaThumbWidth = mediaThumbWidth;
51 this.mediaThumbHeight = mediaThumbHeight;
52 this.mediaAuthor = メディア著者;
53}
54 #エンドリージョン
55
56 内部項目変数#region 内部項目変数
57 // 項目変数
58 プライベート文字列 itemTitle;
59 プライベート文字列 itemLink;
60 プライベート文字列 itemDescription;
61 プライベート文字列 itemPubDate = DateTime.Now.ToString("r");
62 プライベート文字列 itemDateTaken = DateTime.Now.ToString();
63 プライベート文字列 itemAuthor;
64 プライベート文字列 itemGuid;
65 // メディア変数
66 プライベート文字列 mediaContentUrl;
67 プライベート文字列 mediaTitle;
68 プライベート文字列 mediaDescription;
69 プライベート文字列 mediaThumbUrl;
70 プライベート文字列 mediaThumbWidth;
71 プライベート文字列 mediaThumbHeight;
72 プライベート文字列 mediaAuthor;
73 #エンドリージョン
74
75 アイテムプロパティ#region アイテムプロパティ
76 パブリック文字列ItemTitle
77 {
78 セット {アイテムタイトル = 値 }
79 取得 { アイテムタイトルを返す }
80}
81 パブリック文字列ItemLink
82 {
83 セット { itemLink = 値 }
84 取得 { アイテムリンクを返す }
85}
86 パブリック文字列
87 {
88 セット {項目説明 = 値 }
89 取得 { 項目説明を返す }
90}
91 パブリック文字列ItemPubDate
92 {
93 セット { itemPubDate = 値 }
94 取得 { 戻り値 }
95 }
96 パブリック文字列ItemDateTaken
97 {
98 セット {アイテム日付取得 = 値 }
99 取得 { return itemDateTaken }
100}
101 パブリック文字列ItemAuthor
102 {
103 セット { itemAuthor = 値 }
104 取得 { アイテム著者を返す }
105 }
106 パブリック文字列ItemGuid
107 {
108 セット { itemGuid = 値 }
109 取得 { 戻り値 }
110 }
111 パブリック文字列 MediaContentUrl
112 {
113 セット{メディアコンテンツUrl =値}
114 取得 { メディアコンテンツ URL を返す }
115 }
116 パブリック文字列 MediaTitle
117 {
118 セット {メディアタイトル = 値 }
119 取得 { メディアタイトルを返す }
120 }
121 パブリック文字列 MediaDescription
122 {
123 セット {メディア説明 = 値 }
124 取得 { メディア説明を返す }
125 }
126 パブリック文字列 MediaThumbUrl
127 {
128 セット {mediaThumbUrl = 値 }
129 取得 {メディアThumbUrlを返す}
130 }
131 パブリック文字列 MediaThumbWidth
132 {
133 セット{mediaThumbWidth =値}
134 取得 { メディアサム幅を返す }
135 }
136 パブリック文字列 MediaThumbHeight
137 {
138 セット{mediaThumbHeight =値}
139 取得 { メディアサムハイトを返す }
140 }
141 パブリック文字列 MediaAuthor
142 {
143 セット {mediaAuthor = 値 }
144 取得 { メディア著者を返す }
145 }
146 #エンドリージョン
147
148 }
149
150 定数文字列#領域 定数文字列
151 private const string TITLE = "MyMedia RSS";
152 private const string XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 プライベート const string XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 private const string LINK = " http://www.MyWii.com.au/ ";
155 private const string DESCRIPTION = "説明";
156 private const string LANGUAGE = "en-us";
157 private const string COPYRIGHT = "Copyright 2006";
158 private const string GENERATOR = "MyMedia RSS ジェネレーター";
159 プライベート定数文字列 IMAGE_URL = " 160 プライベート定数文字列 IMAGE_TITLE = "MyWii";
161 private const string IMAGE_LINK = " http://www.MyWii.com.au ";
162 プライベート文字列 PUB_DATE = DateTime.Now.ToString("r");
163 プライベート文字列 LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #エンドリージョン
166
167 内部メンバ変数#region 内部メンバ変数
168 プライベート XmlTextWriter rssWriter;
169 プライベートブール hasMedia;
170 個のプライベート IList<ItemInfo> アイテム。
171 #エンドリージョン
172
173 プロパティ#region プロパティ
174 パブリック XmlTextWriter RssWriter
175 {
176 セット{rssWriter =値}
177 取得 { rssWriter を返す }
178 }
179 パブリック ブール HasMedia
180{
181 セット { hasMedia = 値 }
182 取得 { 戻り値 }
183}
184 個のパブリック IList<ItemInfo> アイテム
185 {
186 セット { 項目 = 値 }
187 取得 { アイテムを返す }
188 }
189
190 #エンドリージョン
191
192 プライベートメソッド#リージョン プライベートメソッド
193
194 プライベート void WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("バージョン", "2.0");
199 rssWriter.WriteAttributeString("xmlns:media", 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("説明", DESCRIPTION);
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("言語", LANGUAGE);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("著作権", COPYRIGHT);
218 rssWriter.WriteString("n");
219 rssWriter.WriteElementString("ジェネレータ", GENERATOR);
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 プライベート void WriteItem(ItemInfo アイテム)
238 {
239 // アイテムブロックに書き込み
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(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("作成者", 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 // ここにアイテムメディアを書き込みます
267
268 }
269
270 /**//// <概要>
271 /// アイテムメディアに書き込む
272 /// </まとめ>
273 /// <param name="item">ItemInfo アイテム</param>
274 プライベート void 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("メディア:タイトル", item.MediaTitle);
284 rssWriter.WriteString("n");
285 rssWriter.WriteStartElement("メディア:テキスト");
286 rssWriter.WriteAttributeString("type", "html");
287 rssWriter.WriteString(item.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("width", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("メディア:クレジット");
297 rssWriter.WriteAttributeString("役割", "写真家");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <概要>
305 /// item要素を閉じる
306 /// </概要>
307 プライベート void WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <概要>
315 /// すべての要素を閉じる
316 /// </概要>
317 プライベート void WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #エンドリージョン
326
327 /**//// <概要>
328 /// RSSフィードを書き込む
329 /// </まとめ>
330 パブリックボイドWriteRSS()
331 {
332 書き込みプロローグ();
333 foreach (アイテム内のItemInfo情報)
334 {
335 書き込みアイテム(情報);
336 if (メディアあり)
337 ライトアイテムメディア(情報);
338 書き込み項目終了();
339 }
340 書き込み終了();
341 }
342 }
343}
次に、FeedBase.cs クラスを使用して、上記の RssBase クラスのメソッドとプロパティを呼び出します。コードは次のとおりです。 (このファイルは変更されています。コンパイルする場合は、関連する変更を行う必要があります)
1using System.Collections.Generic;
2System.Configuration を使用します。
3System.Data を使用します。
4System.Text を使用します。
5System.Web を使用します。
6System.Web.UI を使用します。
7System.Xml を使用します。
8
9
10パブリック クラス FeedBase : ページ
11{
12 パブリック void GenerateRss()
13 {
14
15 IList<RssBase.ItemInfo> 項目 = new List<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(), row[ "作成者"].ToString(), "guid");
21 個のアイテム。追加(アイテム);
22 }
23
24 XmlTextWriter xmlWriter = new XmlTextWriter(Response.OutputStream,
25 エンコーディング.UTF8);
26
27 RssBase rssBase = new RssBase(xmlWriter, false, items);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 応答.ContentEncoding = エンコーディング.UTF8;
34 Response.ContentType = "テキスト/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 応答.End();
38 }
39
40}
41
42
最後に、新しい feed.aspx ファイルを作成し、FeedBase クラスを継承し、このクラスで GenerateRss() メソッドを呼び出すだけで、必要な RSS フィードを簡単に生成できます :)
ご提案やアイデアがありましたら、メッセージを残してください。
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html