Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.48.135] |
|
Сообщ.
#1
,
|
|
|
Иногда приходится работать с Rss каналами. Вот как осуществляется работа:
1. Кидаем на форму ListBox и Label. 2. Создаем три класса: RssChannel, RssItem, RssFeed. RssChannel using System; using System.Collections.Generic; using System.Xml; public class RssChannel { private readonly string title; private readonly string link; private List<RssItem> items; public string Title { get { return title; } } public string Link { get { return link; } } public IList<RssItem> Items { get { return items.AsReadOnly(); } } internal RssChannel(XmlNode channelNode) { items = new List<RssItem>(); title = channelNode.SelectSingleNode("title").InnerText; link = channelNode.SelectSingleNode("link").InnerText; XmlNodeList itemNodes = channelNode.SelectNodes("item"); foreach (XmlNode itemNode in itemNodes) { items.Add(new RssItem(itemNode)); } } } RssItem using System; using System.Xml; public class RssItem { private readonly string title; private readonly string description; private readonly string link; public string Title { get { return title; } } public string Description { get { return description; } } public string Link { get { return link; } } internal RssItem(XmlNode itemNode) { XmlNode selected; selected = itemNode.SelectSingleNode("title"); if (selected != null) title = selected.InnerText; selected = itemNode.SelectSingleNode("description"); if (selected != null) description = selected.InnerText; selected = itemNode.SelectSingleNode("link"); if (selected != null) link = selected.InnerText; } } RssFeed using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Xml; public class RssFeed { private List<RssChannel> channels; public IList<RssChannel> Channels { get { return channels.AsReadOnly(); } } private RssFeed(XmlNode xmlNode) { channels = new List<RssChannel>(); XmlNode rssNode = xmlNode.SelectSingleNode("rss"); XmlNodeList channelNodes = rssNode.ChildNodes; foreach (XmlNode channelNode in channelNodes) { RssChannel newChannel = new RssChannel(channelNode); channels.Add(newChannel); } } public static RssFeed FromUri(string uri) { XmlDocument xmlDoc; WebClient webClient = new WebClient(); using (Stream rssStream = webClient.OpenRead(uri)) { TextReader textReader = new StreamReader(rssStream); XmlTextReader reader = new XmlTextReader(textReader); xmlDoc = new XmlDocument(); xmlDoc.Load(reader); } return new RssFeed(xmlDoc); } } 3. В коде формы пишем private RssFeed rssFeed; private void LoadRssFeed() { try { rssFeed = RssFeed.FromUri(textBoxUri.Text); InitializeRssView(); } catch { } } private void InitializeRssView() { foreach (RssItem rssItem in rssFeed.Channels[0].Items) { this.listBox.Items.Add(rssItem.Title); } } Код конструктора формы: InitializeComponent() LoadRssFeed(); При выделениии строки в ListBox заполняем Label. label.Text = ""; label.Text = rssFeed.Channels[0].Items[listBox.SelectedIndex].Description; Прикреплённый файлNewsReader.zip (41.9 Кбайт, скачиваний: 246) |