博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#打造的一款简易新闻阅读器
阅读量:5735 次
发布时间:2019-06-18

本文共 2561 字,大约阅读时间需要 8 分钟。

hot3.png

    使用visual studio 2010工具,编程语言c#。使用c#win form见一个工程。

在Form上放置一个Label,一个文本框txtURL用来输入RSS链接(就是各网站RSS链接中包含的地址),一个按钮bnRead用来执行读取新闻, 一个TreeView树形控件treeRSS显示读出的新闻项。

next,敲击代码:

public class rss

    {public struct Channel
        {public string Title;
         public Hashtable  Items;
        }

        public struct Item

         {public string Title;
         public string Description;
         public string Link;
         }
    }
    Channel结构将存储CHANNEL节点包含的所有子节点信息,其中Items成员字段是一个Hashtable集合,程序会将Item结构作为对象加入集合,用来存储Channel下的所有Item节点。这里我只读取了有限的几个节点,读者可以根据实际需要扩展整个结构定义。
    2
。从RSS链接中获取新闻信息    现在我们就可以开始编写读取函数,将抽取出的RSS信息放入上面设计好的结构中。
    C#提供了专门的类来访问XML, 使我们能够轻松地读出RSS的内容。代码如下:
    XmlTextReader Reader = new XmlTextReader(URL);
    XmlValidatingReader Valid = new XmlValidatingReader(Reader);
    Valid.ValidationType = ValidationType.None;
    XmlDocument xmlDoc= new XmlDocument();
    xmlDoc.Load(Reader);
    使用XmlDocument类将txtURL中输入的RSS链接加载后,首先通过FoundChildNode函数,找到Channel节点。
    private XmlNode FoundChildNode(XmlNode Node,string Name)

{XmlNode childlNode = null;
     for (int i=0;i < Node.ChildNodes.Count;i++)
    {if ( Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0 )
    {childlNode = Node.ChildNodes[i];
     return childlNode;}}
     return childlNode;}
    XmlNode rssNode = FoundChildNode(xmlDoc,"rss");
    XmlNode channelNode = FoundChildNode(rssNode,"channel");
    然后我们就可以遍历它的子节点,根据子节点的Name属性,读取我们需要的信息。
    rss.Channel channel=new rss.Channel();
    channel.Items=new Hashtable();
    {switch ( channelNode.ChildNodes[i].Name )
         {case "title":
              {channel.Title = channelNode.ChildNodes[i].InnerText;
              break;}
         case "item":
              {rss.Item item=this.getRssItem(channelNode.ChildNodes[i]);
           channel.Items.Add(channel.Items.Count,item  );
         break;}
    }}
    如果发现是item子节点,就调用getRssItem函数,同样通过遍历子节点的方法,将其子节点内容填入Item结构中,然后再添加到Channel结构的Items集合中。因为本程序并不关心添加到集合的键值,只需要它是不重复的值,所以我传入了Count属性。
    
3.
将读出的信息显示在程序中
    
将RSS内容读出后,就需要把信息展示给用户了。我们这里用的是基本的TreeView方法,通过遍历Channel结构的Items集合,将其标题添加到TreeView中。
    private void ViewRss(rss.Channel channel)
    {treeRss.BeginUpdate();
     treeRss.Nodes.Clear();
     TreeNode channelNode=treeRss.Nodes.Add(channel.Title ); 
     channelNode.Tag="";
     for (int i=0;i <channel.Items.Count ;i++)
    {rss.Item item=(rss.Item)channel.Items[i];
    TreeNode itemNode=channelNode.Nodes.Add(item.Title );
    itemNode.Tag=item.Link ;}
    treeRss.ExpandAll();
    treeRss.EndUpdate();}
    同时我们还可以设置TreeView的每个子节点的Tag属性为它对应的链接。以便当选中子节点时就可以通过读取Tag属性访问具体的信息。
    private void treeRss_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {TreeNode itemNode=e.Node ;
    string URL=itemNode.Tag.ToString();
    if (URL.Length!=0)
         System.Diagnostics.Process.Start( URL);}

代码编写完毕,可以运行效果图啦。

end,

转载于:https://my.oschina.net/bigfool007139/blog/539934

你可能感兴趣的文章
AWS推出深度学习容器,简化AI程序开发
查看>>
算法(第4版) Chapter 1
查看>>
前端技术选型的遗憾和经验教训
查看>>
“亲切照料”下的领域驱动设计
查看>>
GIT
查看>>
微软宣布公开预览其内容分发网络
查看>>
SRE工程师到底是做什么的?
查看>>
解读:Red Hat为什么收购Ansible
查看>>
AWS Config新增跨账户、跨区域数据聚合功能
查看>>
spring整合mybatis是如何配置事务的?
查看>>
Educational Codeforces Round 21(A.暴力,B.前缀和,C.贪心)
查看>>
Mina2.0框架源码剖析(七)
查看>>
MIME类型
查看>>
第 3 章 Berkeley UNIX C shell (csh)
查看>>
LIST<T>现在也支持序列化和反序列化了
查看>>
【转】Android世界的Swift - Kotlin语言
查看>>
基于Spring Boot的Logback日志轮转配置
查看>>
3.2. Access Privilege System
查看>>
基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持...
查看>>
用原型继承方法
查看>>