Estuve escribiendo un feed RSS hace algún tiempo.
Después de varias modificaciones, el código relevante se escribió en una clase separada.
Parece bastante conveniente reutilizarlo. Así que lo publiqué y dejé que todos lo estudiaran juntos.
La siguiente es la clase RssBase.cs:
1usando el sistema;
2usando System.Collections.Generic;
3usando System.Xml;
4
5espacio de nombres MyMedia.Utilidades
6{
7 RssBase de clase pública
8 {
9 constructor de RssBase#constructor de región RssBase
10 RssBase pública (XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 RssBase pública (elementos XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo>)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = tieneMedia;
18 this.items = elementos;
19}
20 #endregion
veintiuno
22 [Serializable]
23 clase pública sellada ItemInfo
veinticuatro {
25 Constructor ItemInfo#constructor región ItemInfo
26 Información del elemento público() { }
27 ItemInfo pública (cadena ItemTitle, cadena ItemLink, cadena ItemDescription, cadena ItemPubDate, cadena ItemAuthor, cadena ItemGuid)
28 {
29 this.itemTitle = título del artículo;
30 this.itemLink = itemLink;
31 this.itemDescription = itemDescription;
32 this.itemAuthor = itemAuthor;
33 this.itemGuid = itemGuid;
34 this.itemPubDate = itemPubDate;
35}
36 ItemInfo pública (cadena itemTitle, cadena itemLink, cadena itemDescription, cadena itemPubDate, cadena itemAuthor,
37 cadena itemGuid, cadena mediaContentUrl, cadena mediaTitle, cadena mediaDescription,
38 cadenas mediaThumbUrl, cadenas mediaThumbWidth, cadenas mediaThumbHeight, cadenas mediaAuthor)
39 {
40 this.itemTitle = itemTitle;
41 this.itemLink = artículoEnlace;
42 this.itemDescription = itemDescription;
43 this.itemPubDate = itemPubDate;
44 this.itemAuthor = itemAuthor;
45 this.itemGuid = itemGuid;
46 this.mediaContentUrl = mediaContentUrl;
47 this.mediaTitle = mediaTitle;
48 this.mediaDescription = mediaDescripción;
49 this.mediaThumbUrl = mediaThumbUrl;
50 this.mediaThumbWidth = mediaThumbWidth;
51 this.mediaThumbHeight = mediaThumbHeight;
52 this.mediaAuthor = mediaAuthor;
53}
54 #regiónfinal
55
56 Variables internas del artículo#región Variables internas del artículo
57 // Variables de elementos
58 cadena privada itemTitle;
59 cadena privada itemLink;
60 cadena privada itemDescription;
61 cadena privada itemPubDate = DateTime.Now.ToString("r");
62 cadena privada itemDateTaken = DateTime.Now.ToString();
63 cadena privada itemAuthor;
64 cadena privada itemGuid;
65 // Variables de medios
66 cadena privada mediaContentUrl;
67 cadena privada mediaTitle;
68 descripción de medios de cadena privada;
69 cadena privada mediaThumbUrl;
70 cadenas privadas mediaThumbWidth;
71 cadena privada mediaThumbHeight;
72 cadenas privadas mediaAuthor;
73 #regiónfinal
74
75 Propiedades del artículo#región Propiedades del artículo
76 cadena pública Título del artículo
77 {
78 establecer {título del artículo = valor};
79 obtener {devolver título del artículo}
80}
81 cadena pública ItemLink
82 {
83 establecer { itemLink = valor }
84 obtener {devolver enlace de artículo}
85}
86 cadena pública Descripción del artículo
87 {
88 conjunto { itemDescription = valor }
89 obtener {devolver descripción del artículo}
90}
91 cadena pública ItemPubDate
92 {
93 establecer { itemPubDate = valor }
94 obtener {return itemPubDate}
95 }
96 cadena pública ItemDateTaken
97 {
98 establecer { itemDateTaken = valor }
99 obtener {return itemDateTaken}
100}
101 cadena pública ItemAuthor
102 {
103 establecer { itemAuthor = valor }
104 obtener { return itemAuthor }
105 }
106 cadena pública ItemGuid
107 {
108 establecer { itemGuid = valor }
109 obtener {return itemGuid}
110 }
111 cadena pública MediaContentUrl
112 {
113 establecer { mediaContentUrl = valor }
114 obtener { return mediaContentUrl }
115 }
116 cadena pública MediaTitle
117 {
118 establecer { título media = valor }
119 obtener {return mediaTitle}
120 }
121 cadena pública MediaDescription
122 {
123 establecer { mediaDescripción = valor }
124 obtener {return mediaDescription}
125 }
126 cadena pública MediaThumbUrl
127 {
128 establecer { mediaThumbUrl = valor }
129 obtener {return mediaThumbUrl}
130 }
131 cadena pública MediaThumbWidth
132 {
133 establecer { mediaThumbWidth = valor }
134 obtener {return mediaThumbWidth}
135 }
136 cadena pública MediaThumbHeight
137 {
138 establecer { mediaThumbHeight = valor }
139 obtener {return mediaThumbHeight}
140 }
141 cadena pública MediaAuthor
142 {
143 establecer {mediaAuthor = valor}
144 obtener {return mediaAuthor}
145 }
146 #endregion
147
148 }
149
150 Cadena constante#región Cadena constante
151 cadena constante privada TÍTULO = "MyMedia RSS";
152 cadena constante privada XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 cadena constante privada XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 cadena constante privada ENLACE = " http://www.MyWii.com.au/ ";
155 cadena constante privada DESCRIPCIÓN = "descripción";
156 cadena constante privada IDIOMA = "en-us";
157 cadena constante privada COPYRIGHT = "Copyright 2006";
158 cadena constante privada GENERADOR = "Generador MyMedia RSS";
159 cadena constante privada IMAGE_URL = " 160 cadena constante privada IMAGE_TITLE = "MyWii";
161 cadena constante privada IMAGE_LINK = " http://www.MyWii.com.au ";
162 cadena privada PUB_DATE = DateTime.Now.ToString("r");
163 cadena privada LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #endregion
166
167 Variables miembro internas#región Variables miembro internas
168 XmlTextWriter privado rssWriter;
169 bool privado tieneMedia;
170 elementos privados IList<ItemInfo>;
171 #endregion
172
173 Propiedades#Propiedades de región
174 público XmlTextWriter RssWriter
175 {
176 establecer {rssWriter = valor};
177 obtener {return rssWriter}
178 }
179 bool público HasMedia
180 {
181 establecer { tieneMedia = valor }
182 obtener {return hasMedia}
183}
184 elementos públicos IList<ItemInfo>
185 {
186 conjunto {elementos = valor}
187 obtener {devolver artículos}
188 }
189
190 #endregion
191
192 Método privado#región Método privado
193
194 vacío privado WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("versión", "2.0");
199 rssWriter.WriteAttributeString("xmlns:media", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // Escribir en bloque de canal
203 rssWriter.WriteStartElement("canal");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("título", TÍTULO);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("enlace", ENLACE);
208 rssWriter.WriteString("n ");
209 rssWriter.WriteElementString("descripción", DESCRIPCIÓN);
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("derechos de autor", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("generador", GENERADOR);
220 rssWriter.WriteString("n ");
221 // Escribir en bloque de imagen
222 rssWriter.WriteStartElement("imagen");
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("enlace", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232 }
233
234 /**//// <resumen>
235 /// Escribir en elementos
236 /// </summary>
237 WriteItem privado vacío (elemento ItemInfo)
238 {
239 // Escribir en bloque de elementos
240 rssWriter.WriteStartElement("elemento");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("título", elemento.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("enlace", item.ItemLink);
245 rssWriter.WriteString("n ");
246
247 rssWriter.WriteStartElement("descripción");
248 rssWriter.WriteString("n ");
249 rssWriter.WriteCData(elemento.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("autor", item.ItemAuthor);
259 rssWriter.WriteString("n ");
260 rssWriter.WriteStartElement("guid");
261 rssWriter.WriteAttributeString("isPermaLink", "falso");
262 rssWriter.WriteString(elemento.ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // Escribe los medios del elemento aquí
267
268 }
269
270 /**//// <resumen>
271 /// Escribir en el medio del elemento
272 /// </summary>
273 /// <param name="item">elemento ItemInfo</param>
274 WriteItemMedia privado vacío (elemento ItemInfo)
275 {
276 // Escribir en medios
277 rssWriter.WriteString("n ");
278 rssWriter.WriteStartElement("medios: contenido");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("tipo", "imagen/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("n ");
283 rssWriter.WriteElementString("medios:título", item.MediaTitle);
284 rssWriter.WriteString("n ");
285 rssWriter.WriteStartElement("medios:texto");
286 rssWriter.WriteAttributeString("tipo", "html");
287 rssWriter.WriteString(item.MediaDescription);
288 rssWriter.WriteEndElement();
289 rssWriter.WriteString("n ");
290 rssWriter.WriteStartElement("medios: miniatura");
291 rssWriter.WriteAttributeString("url", item.MediaThumbUrl);
292 rssWriter.WriteAttributeString("altura", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("ancho", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("medios:crédito");
297 rssWriter.WriteAttributeString("rol", "fotógrafo");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <resumen>
305 /// Cerrar elemento de elemento
306 /// </summary>
307 vacío privado WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <resumen>
315 /// Cerrar todos los elementos
316 /// </summary>
317 vacío privado WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #endregion
326
327 /**//// <resumen>
328 /// Escribir fuente RSS
329 /// </summary>
330 vacío público WriteRSS ()
331 {
332 EscribirPrólogo();
333 foreach (información de ItemInfo en artículos)
334 {
335 WriteItem(información);
336 si (tieneMedia)
337 WriteItemMedia(información);
338 WriteItemEnd();
339 }
340 Fin de escritura();
341 }
342 }
343}
Luego use una clase FeedBase.cs para llamar a los métodos y propiedades en la clase RssBase anterior. El código es el siguiente. (Este archivo ha sido modificado. Si desea compilarlo, debe realizar las modificaciones pertinentes)
1 usando System.Collections.Generic;
2usando la configuración del sistema;
3usando datos del sistema;
4usando System.Text;
5usando System.Web;
6usando System.Web.UI;
7usando System.Xml;
8
9
10FeedBase de clase pública: Página
11{
12 vacío público GenerarRss()
13 {
14
15 elementos IList<RssBase.ItemInfo> = nueva Lista<RssBase.ItemInfo>();
16
17 // Completar elementos.
18 foreach (fila DataRow en filas)
19 {
20 Elemento RssBase.ItemInfo = nuevo RssBase.ItemInfo(fila["Título"].ToString(), "enlace", fila["Descripción"].ToString(), fila["PubDate"].ToString(), fila[ "Autor"].ToString(), "guid");
21 artículos. Agregar (artículo);
Veintidós }
veintitrés
24 XmlTextWriter xmlWriter = nuevo XmlTextWriter(Response.OutputStream,
25 Codificación.UTF8);
26
27 RssBase rssBase = nuevo RssBase(xmlWriter, false, elementos);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Response.ContentEncoding = Codificación.UTF8;
34 Respuesta.ContentType = "texto/xml";
35 Respuesta.Cache.SetCacheability(HttpCacheability.Public);
36
37 Respuesta.End();
38 }
39
40}
41
42
Finalmente, simplemente cree un nuevo archivo feed.aspx, herede la clase FeedBase y llame al método GenerateRss() en esta clase para generar fácilmente la fuente RSS que desea :)
Si tiene alguna sugerencia o idea, ¡deje un mensaje!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html