Eu estava escrevendo um feed RSS há algum tempo.
Após diversas modificações, o código relevante foi escrito em uma classe separada.
É bastante conveniente reutilizar. Então postei e deixei todos estudarem juntos.
A seguir está a classe RssBase.cs:
1usando Sistema;
2usando System.Collections.Generic;
3usando System.Xml;
4
5namespace MyMedia.Utilitários
6{
7 classe pública RssBase
8 {
9 Construtor RssBase#região Construtor RssBase
10 RssBase público (XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 public RssBase (XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo> itens)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = itens;
19}
20 #regiãofinal
vinte e um
22 [Serializável]
23 classe pública selada ItemInfo
vinte e quatro {
25 Construtor ItemInfo#região Construtor ItemInfo
26 ItemInfo público() { }
27 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor, string itemGuid)
28 {
29 this.itemTitle = itemTitle;
30 this.itemLink = itemLink;
31 this.itemDescription = itemDescrição;
32 this.itemAutor = itemAutor;
33 this.itemGuid = itemGuid;
34 this.itemPubDate = itemPubDate;
35}
36 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor,
37 string itemGuid, string mediaContentUrl, string mediaTitle, string mediaDescription,
38 string mediaThumbUrl, string mediaThumbWidth, string mediaThumbHeight, string mediaAuthor)
39 {
40 this.itemTitle = itemTitle;
41 this.itemLink = itemLink;
42 this.itemDescription = itemDescrição;
43 this.itemPubDate = itemPubDate;
44 this.itemAutor = itemAutor;
45 this.itemGuid = itemGuid;
46 this.mediaContentUrl = mediaContentUrl;
47 this.mediaTitle = mediaTitle;
48 this.mediaDescription = mediaDescrição;
49 this.mediaThumbUrl = mediaThumbUrl;
50 this.mediaThumbWidth = mediaThumbWidth;
51 this.mediaThumbHeight = mediaThumbHeight;
52 this.mediaAutor = mediaAutor;
53}
54 #endregion
55
56 Variáveis de item interno#região Variáveis de item interno
57 // Variáveis de item
58 string privada itemTitle;
59 string privada itemLink;
60 string privada itemDescrição;
61 string privada itemPubDate = DateTime.Now.ToString("r");
62 string privada itemDateTaken = DateTime.Now.ToString();
63 string privada itemAutor;
64 string privada itemGuid;
65 // Variáveis de mídia
66 string privada mediaContentUrl;
67 string privada mediaTitle;
68 string privada mediaDescription;
69 string privada mediaThumbUrl;
70 string privada mediaThumbWidth;
71 string privada mediaThumbHeight;
72 string privada mediaAuthor;
73 #endregion
74
75 Propriedades do item#região Propriedades do item
76 string pública ItemTitle
77 {
78 set {itemTítulo = valor};
79 get { return itemTitle };
80}
81 string pública ItemLink
82 {
83 set {itemLink = valor};
84 obter {retornar itemLink};
85}
86 string pública ItemDescription
87 {
88 set { itemDescrição = valor };
89 get { return itemDescrição };
90}
91 string pública ItemPubDate
92 {
93 set { itemPubDate = valor };
94 get { return itemPubDate };
95}
96 string pública ItemDateTaken
97 {
98 set {itemDateTaken = valor};
99 get { return itemDateTaken };
100}
101 string pública ItemAutor
102 {
103 set {itemAutor = valor};
104 get { return itemAutor };
105}
106 string pública ItemGuid
107 {
108 conjunto { itemGuid = valor };
109 obter { return itemGuid };
110}
111 string pública MediaContentUrl
112 {
113 definir {mediaContentUrl = valor};
114 obter {retornar mediaContentUrl};
115}
116 string pública MediaTitle
117 {
118 conjunto { mediaTítulo = valor};
119 get { return mediaTitle };
120}
121 string pública MediaDescription
122 {
123 set { mediaDescrição = valor };
124 get { return mediaDescrição };
125}
126 string pública MediaThumbUrl
127 {
128 conjunto {mediaThumbUrl = valor};
129 obter {retornar mediaThumbUrl};
130}
131 string pública MediaThumbWidth
132 {
133 definir {mediaThumbWidth = valor};
134 obter { retornar mediaThumbWidth }
135}
136 string pública MediaThumbHeight
137 {
138 conjunto {mediaThumbHeight = valor};
139 obter {retornar mediaThumbHeight};
140}
141 string pública MediaAuthor
142 {
143 set {mediaAutor = valor};
144 get { return mediaAutor };
145}
146 #regiãofinal
147
148}
149
150 String Const#região String Const
151 string const privada TITLE = "MyMedia RSS";
152 string const privada XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 string const privada XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 string const privada LINK = " http://www.MyWii.com.au/ ";
155 string const privada DESCRIÇÃO = "descrição";
156 string const privada LANGUAGE = "en-us";
157 string const privada COPYRIGHT = "Copyright 2006";
158 private const string GENERATOR = "Gerador RSS MyMedia";
159 string const privada IMAGE_URL = " 160 string const privada IMAGE_TITLE = "MyWii";
161 string const privada IMAGE_LINK = " http://www.MyWii.com.au ";
162 string privada PUB_DATE = DateTime.Now.ToString("r");
163 string privada LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #regiãofinal
166
167 Variáveis de membro interno#região Variáveis de membro interno
168 privado XmlTextWriter rssWriter;
169 privado bool hasMedia;
170 itens privados IList<ItemInfo>;
171 #regiãofinal
172
173 Propriedades#região Propriedades
174 XmlTextWriter público RssWriter
175 {
176 conjunto {rssWriter = valor};
177 obter {retornar rssWriter};
178}
179 bool público HasMedia
180 {
181 conjunto { hasMedia = valor };
182 obter {retornar hasMedia};
183}
184 itens públicos IList<ItemInfo>
185 {
186 conjunto {itens = valor};
187 obter { retornar itens };
188}
189
190 #regiãofinal
191
192 Método privado#região Método privado
193
194 privado vazio WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("versão", "2.0");
199 rssWriter.WriteAttributeString("xmlns:media", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // Escreve no bloco do canal
203 rssWriter.WriteStartElement("canal");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("título", TÍTULO);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("link", LINK);
208 rssWriter.WriteString("n ");
209 rssWriter.WriteElementString("descrição", DESCRIÇÃO);
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("idioma", IDIOMA);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("direitos autorais", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("gerador", GERADOR);
220 rssWriter.WriteString("n ");
221 // Escreve no bloco de imagem
222 rssWriter.WriteStartElement("imagem");
223 rssWriter.WriteString("n ");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n ");
226 rssWriter.WriteElementString("título", IMAGE_TITLE);
227 rssWriter.WriteString("n ");
228 rssWriter.WriteElementString("link", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232}
233
234 /**//// <resumo>
235 /// Escreva nos itens
236 /// </summary>
237 privado void WriteItem (item ItemInfo)
238 {
239 // Escreve no bloco de item
240 rssWriter.WriteStartElement("item");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("título", item.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("link", item.ItemLink);
245 rssWriter.WriteString("n ");
246
247 rssWriter.WriteStartElement("descrição");
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:data.Taken", item.ItemDateTaken);
257 rssWriter.WriteString("n ");
258 rssWriter.WriteElementString("autor", item.ItemAuthor);
259 rssWriter.WriteString("n ");
260 rssWriter.WriteStartElement("guid");
261 rssWriter.WriteAttributeString("isPermaLink", "falso");
262 rssWriter.WriteString(item.ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // Escreva o item media aqui
267
268}
269
270 /**//// <resumo>
271 /// Escreve no item media
272 /// </summary>
273 /// <param name="item">item ItemInfo</param>
274 privado void WriteItemMedia (item ItemInfo)
275 {
276 // Escrever na mídia
277 rssWriter.WriteString("n ");
278 rssWriter.WriteStartElement("mídia:conteúdo");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("tipo", "imagem/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("n ");
283 rssWriter.WriteElementString("mídia:título", item.MediaTitle);
284 rssWriter.WriteString("n ");
285 rssWriter.WriteStartElement("mídia:texto");
286 rssWriter.WriteAttributeString("tipo", "html");
287 rssWriter.WriteString(item.MediaDescription);
288 rssWriter.WriteEndElement();
289 rssWriter.WriteString("n ");
290 rssWriter.WriteStartElement("mídia:thumbnail");
291 rssWriter.WriteAttributeString("url", item.MediaThumbUrl);
292 rssWriter.WriteAttributeString("altura", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("largura", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("mídia:crédito");
297 rssWriter.WriteAttributeString("função", "fotógrafo");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302}
303
304 /**//// <resumo>
305 /// Fecha o elemento do item
306 /// </summary>
307 privado vazio WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312}
313
314 /**//// <resumo>
315 /// Fecha todos os elementos
316 /// </summary>
317 privado vazio WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323}
324
325 #regiãofinal
326
327 /**//// <resumo>
328 /// Gravar feed RSS
329 /// </summary>
330 público vazio WriteRSS()
331 {
332 WritePrólogo();
333 foreach (informações de ItemInfo em itens)
334 {
335 WriteItem(informações);
336 se (hasMedia)
337 WriteItemMedia(informações);
338 WriteItemEnd();
339}
340 WriteEnd();
341}
342}
343}
Em seguida, use uma classe FeedBase.cs para chamar os métodos e propriedades da classe RssBase acima. O código é o seguinte. (Este arquivo foi alterado. Se você quiser compilá-lo, você precisa fazer modificações relevantes)
1using System.Collections.Generic;
2usando System.Configuration;
3usando System.Data;
4usando System.Text;
5usando System.Web;
6usando System.Web.UI;
7usando System.Xml;
8
9
10classe pública FeedBase: Página
11{
12 void público GenerateRss()
13 {
14
15 IList<RssBase.ItemInfo> itens = new List<RssBase.ItemInfo>();
16
17 // Preencher itens.
18 foreach (linha DataRow em linhas)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(linha["Título"].ToString(), "link", linha["Descrição"].ToString(), linha["PubDate"].ToString(), linha[ "Autor"].ToString(), "guid");
21 itens.Adicionar(item);
vinte e dois }
vinte e três
24 XmlTextWriter xmlWriter = novo XmlTextWriter (Response.OutputStream,
25 Codificação.UTF8);
26
27 RssBase rssBase = new RssBase(xmlWriter, false, itens);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Response.ContentEncoding = Encoding.UTF8;
34 Response.ContentType = "texto/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 Response.End();
38}
39
40}
41
42
Por fim, basta criar um novo arquivo feed.aspx, herdar a classe FeedBase e chamar o método GenerateRss() nesta classe para gerar facilmente o RSS Feed que você deseja :)
Se você tiver alguma sugestão ou ideia, deixe uma mensagem!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html