这里做了一个简单的RSSReader,功能十分简单,小试牛刀而且.

RSS具体规范可查看http://blogs.law.harvard.edu/tech/rss

首先定义一个class,用来存储RSS

  public   class  RSS
     ... {
        public RSS()
        ...{
            this.items = new Dictionary<int, Item>();
        }

        private string title;

        public string Title
        ...{
            get ...{ return title; }
            set ...{ title = value; }
        }

        private Dictionary<int,Item> items;

        public Dictionary<int,Item> Items
        ...{
            get ...{ return items; }
            set ...{ items = value; }
        }

        public struct Item
        ...{
            private string title;

            public string Title
            ...{
                get ...{ return title; }
                set ...{ title = value; }
            }
            private string link;

            public string Link
            ...{
                get ...{ return link; }
                set ...{ link = value; }
            }
            private string pubdate;

            public string Pubdate
            ...{
                get ...{ return pubdate; }
                set ...{ pubdate = value; }
            }
            public Item(string t, string l, string p)
            ...{
                this.title = t;
                this.link = l;
                this.pubdate = p;
            }
        }
    }

这个class用了generic的Dictionary来存储RSS里的item,后面插入用的key则是采用Dictionary里的count,内部struct Item不言而喻,外面的title是表示channel的title.

同时在winform里放了个label,textbox,button,treeview四个控件,lable只是放个静态文本,textbox用来输入url,button用来响应event更新treeview,treeview就用来展现rss.     UI方面就介绍到些.

下面是程序的主要部分:

public   partial   class  Form1 : Form
     ... {
        public Form1()
        ...{
            InitializeComponent();
        }

        private void buttonRead_Click(object sender, EventArgs e)
        ...{
            //读取RSS到doc
            XmlTextReader reader = new XmlTextReader(this.textBoxUrl.Text);
            XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            //寻找rss结点
            XmlNode rss = FindNode(doc, "rss");
            //寻找channel结点
            XmlNode channel = FindNode(rss, "channel");
            RSS rssobj = new RSS();
            //把rss内容写入rssobj
            SetChannel(rssobj, channel);
            //将rssobj内容显示到treeview
            UpdateTreeView(rssobj);
        }

        private XmlNode FindNode(XmlNode node, string name)
        ...{
            foreach (XmlNode n in node.ChildNodes)
            ...{
                if (n.Name.Equals(name) && n.ChildNodes.Count > 0)
                    return n;
            }
            return null;
        }

        private void SetChannel(RSS rss, XmlNode channel)
        ...{
            foreach (XmlNode n in channel.ChildNodes)
            ...{
                if (n.Name.Equals("description"))
                ...{
                    rss.Title = n.InnerText;
                }
                else if (n.Name.Equals("item"))
                ...{
                    rss.Items.Add(rss.Items.Count, CreateItem(n));
                }
            }
        }

        private RSS.Item CreateItem(XmlNode node)
        ...{
            string title = "";
            string link = "";
            string pubdate = "";
            foreach (XmlNode n in node.ChildNodes)
            ...{
                switch (n.Name)
                ...{
                    case "title":
                        title = n.InnerText;
                        break;
                    case "link":
                        link = n.InnerText;
                        break;
                    case "pubDate":
                        pubdate = n.InnerText;
                        break;
                }
            }
            return new RSS.Item(title, link, pubdate);
        }

        private void UpdateTreeView(RSS rss)
        ...{
            this.treeViewRSS.BeginUpdate();
            this.treeViewRSS.Nodes.Clear();
            this.treeViewRSS.Nodes.Add(rss.Title);
            for(int i=0;i<rss.Items.Count;++i)
            ...{
                this.treeViewRSS.Nodes[0].Nodes.Add(rss.Items[i].Title);
                this.treeViewRSS.Nodes[0].Nodes[i].Tag = rss.Items[i].Link;
            }
            this.treeViewRSS.ExpandAll();
            this.treeViewRSS.EndUpdate();
        }
    }

Simple RSSReader相关推荐

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  2. Simple NHibernate Architecture[from]

    原文地址:http://www.codeproject.com/aspnet/NHibernateArchitecture.asp Download source - 2,523.7 KB Intro ...

  3. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

  4. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  5. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第六章 深入理解wi-Fi Simple Configuration...

    为什么80%的码农都做不了架构师?>>>    首先感谢各位兄弟姐妹们的耐心等待.本书预计在4月上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑 ...

  6. A simple class to play sound on netcf (part 2)

    在实际测试中发现上一片文章(A simple class to play sound on netcf)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的 ...

  7. Simple Transformer:用BERT、RoBERTa、XLNet、XLM和DistilBERT进行多类文本分类

    作者 | Thilina Rajapakse 译者 | Raku 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]本文将介绍一个简单易操作的Transformers库- ...

  8. Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib)

    Matplotlib可视化散点图.配置X轴为对数坐标.并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib) 目录

  9. Comprehensive anticancer drug response prediction based on a simple cell line drug complex network m

    Comprehensive anticancer drug response prediction based on a simple cell line drug complex network m ...

最新文章

  1. 谈谈现在的状况,顺便给以后找工作的和我一样的毕业生说说
  2. OpenGL ES着色器语言之变量和数据类型
  3. 在数据库什么是主键与外键
  4. 混合运算lcd显示_各界巨头寄予厚望 MicroLED靠什么成为显示屏的未来
  5. HDU 2629 Identity Card
  6. 嘿嘿,我就不信搞不定你--Dynamo
  7. 干货分享 | 自然语言处理及词向量模型介绍(附PPT)
  8. 海康摄像机通过Ehome协议接入EasyCVR无法成功上线的原因排查及配置注意事项
  9. win10计算机管理被阻止,Win10家庭版安装程序提示系统管理员已阻止你运行此应用的解决办法...
  10. PSPNet 使用问题
  11. VelocityTracker笔记
  12. vue 表格固定首行首列(纯css)
  13. 属于C语言类型标识符的是,【单选题】以上不属于简单比较法的缺点的是( )
  14. TikTok与抖音有什么不同?为什么TikTok被称为“海外版抖音”?
  15. 【leetcode刷题笔记】动态规划
  16. 一、RapidIO背景介绍
  17. matlab jcitest,【期刊】JCI manuscript
  18. python 单应性矩阵实现
  19. Window mobile 软键盘输入法设置
  20. 菊厂221012第三题python

热门文章

  1. Python内置十大文件操作
  2. 2023新春祝福html代码,包你学会
  3. linux 查询cpu内核,如何查看Linux cpu核数、版本等信息
  4. 前端基础 -JQuery 删除节点
  5. 狗狗的年龄的python编程_最新的狗狗年龄和人类年龄换算,算算你的爱犬几岁了...
  6. win10安装mysql数据库
  7. 【2020-CVPR-3D人体姿态估计】Compressed Volumetric Heatmaps for Multi-Person 3D Pose Estimation
  8. 汉诺塔——经典递归问题(c语言实现)
  9. STC32G 单片机EEPROM 操作实例
  10. 我们的青春,除了《灌篮高手》还有那些电脑“大神”