一。弄清结构再动手
要想轻松的抽取RSS信息,自然先要了解它的结构,所谓“知己知彼,百战不殆”嘛。
1。RSS的结构
我们先打开百度新闻一个RSS链接,如果你再多打开几个别的网站的RSS链接,会发现他们都有大致相同的结构。而我们在揭秘RSS(上)中为大家讲解的其实就是编成实现这样的一个XML文件。
为了能够方便地对这样的XML文档进行处理,在本文里,我们使用C#作为开发的语言。
分析整个RSS链接后,我们知道RSS大致的结构入图1。
2。抽取的原理
知道了结构,我们还要知道结构中各部分的含义。在图1中RSS节点表示当前是一个RSS文件,它由一个CHANNEL节点及其子节点组成,其中一些子节点提供关于频道本身的信息,比如title表示频道的名称(“百度互联网新闻”)。
CHANNEL节点又包含多个ITEM子节点,而ITEM节点就是程序需要处理的部分,因为它对应着每条实际的新闻项信息, 每个ITEM节点又通过其子节点提供关于这条新闻的详细信息,比如title表示新闻的标题(“微软IM称王”),link对应新闻实际的链接。
RSS具体规范可查看http://blogs.law.harvard.edu/tech/rss
知道了这些后,要编程就不困难啦。我们只需提取并显示出CHANNEL和ITEM下的各条信息就可以了。现在来看看具体的实现方法吧。
二.做个程序读新闻
对RSS有一定了解后,我们开始编写程序。先还是需要一个最简单的界面。新建一个Win Form 工程,在Form上放置一个Label,一个文本框txtURL用来输入RSS链接(就是各网站RSS链接中包含的地址),一个按钮bnRead用来执行读取新闻, 一个TreeView树形控件treeRSS显示读出的新闻项。
1。定义装载结构
根据上面分析的RSS结构,我们首先来建立一个rss类,用它来装载RSS链接中CHANNEL和ITEM的各条信息。代码如下:
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);}
程序运行效果如图2。
三.小结
怎么样,一个简单的RSS新闻阅读器就按前面所说轻松完成了,容易吧。虽然它还有很多不足,但如果大家通过这个例子学会了抽取RSS链接信息的基本方法,那就足够了!
刊登于 电脑报2005年3月14日 第10期
分享到:
相关推荐
“C#项目新闻阅读器,新手制作” 指示这是一个使用C#编程语言开发的软件项目,其主要功能是作为一个新闻阅读器。由于提及是新手制作,我们可以推测该项目可能是针对初学者或者作为学习C#编程的一个实践案例,可能在...
【C#新闻阅读器】是一种基于C#编程语言开发的应用程序,主要用于获取并展示RSS(Really Simple Syndication)源中的新闻信息。RSS是一种 XML 格式,它允许网站发布更新内容,如文章、博客或者新闻,供用户订阅。C#...
【C#新闻阅读器】是一个基于C#编程语言开发的应用程序,旨在提供一个简洁易用的界面,用于浏览和阅读在线新闻。这个项目是面向初学者设计的,它巧妙地运用了面向对象编程(OOP)的概念,为学习C#基础提供了理想的...
标题中的"C#源码 用C#写的新闻阅读器 有原项目"表明这是一个使用C#编程语言开发的新闻阅读器应用,包含了完整的源代码。新闻阅读器通常是指一种能够帮助用户浏览、阅读和管理来自不同新闻源的软件。这个项目提供了一...
新闻阅读器是一个应用程序,通常用于在线浏览和阅读各种新闻源,提供用户友好的界面和定制化体验。在C#编程环境中构建这样的应用可以利用.NET框架的强大功能,为用户提供高效的性能和丰富的功能集。 C#是一种面向...
总的来说,这个“简单新闻阅读器”项目涵盖了C#编程的基础知识,包括XML解析、事件处理、异步编程、文件I/O操作,以及集合和查询语言的使用。通过这个项目,开发者可以深入理解这些概念,并将其应用于实际的软件开发...
本项目是使用C#实现一个RSS新闻阅读器,通过解析RSS feed,帮助用户方便快捷地获取并浏览感兴趣的新闻内容。 首先,我们需要理解RSS的基本结构。RSS文件通常以XML格式存储,包含一系列频道(channel)和条目(item...
C# RSS阅读器是一款基于C#编程语言开发的应用程序,专为用户管理和阅读RSS(Really Simple Syndication)订阅而设计。RSS是一种XML格式,用于发布新闻、博客和其他定期更新的内容,使得用户可以方便地获取并聚合来自...
【标题】:“C# 自己动手制作多线程RSS新闻阅读器” 在本文中,我们将深入探讨如何使用C#编程语言构建一个多线程的RSS新闻阅读器。RSS(Really Simple Syndication)是一种XML格式,用于发布和订阅网络内容,如新闻...
新浪新闻RSS阅读器是一款基于C#编程语言开发的桌面应用程序,主要功能是抓取并解析新浪新闻的RSS源,将新闻内容以用户友好的方式展示出来。RSS(Really Simple Syndication)是一种数据格式,用于发布定期更新的内容...
【C#制作的RSS新闻阅读器】 RSS(Really Simple Syndication)是一种用于发布和聚合网络内容的简单方式,常用于博客、新闻站点等。通过RSS订阅,用户可以方便地获取到感兴趣网站的最新更新,无需频繁访问每个站点。...
【C#制作的新闻阅读器】是一个用于学习和交流的软件项目,主要功能是解析并显示XML文件中的RSS和ATOM格式的新闻数据。这个阅读器是用C#编程语言实现的,C#是Microsoft开发的一种面向对象的、类型安全的编程语言,常...
【标题】:“C#做的比较不错的新闻阅读器”是指使用C#编程语言开发的一款新闻阅读应用程序。这款软件设计用于提供方便、高效的新闻浏览体验,它可能是由个人开发者或小型团队独立完成的。作为C#的实践项目,它体现了...
标题“C#写的RSS新闻阅读器”揭示了一个基于C#编程语言开发的应用程序,该程序专门设计用于获取、解析和展示RSS(Really Simple Syndication)和Atom格式的新闻源。RSS和Atom是互联网上广泛使用的两种数据交换格式,...
《C#实现的TXT电子书阅读器详解》 在当今数字化时代,电子书阅读器已经成为了许多读者的首选工具,而C#作为一种功能强大的编程语言,可以用来开发各种应用程序,包括电子书阅读器。本篇文章将详细介绍如何使用C#...
【C# RSS新闻阅读器】是一款基于C#编程语言开发的应用程序,专为获取和阅读RSS(Really Simple Syndication)新闻源而设计。RSS是一种XML格式的数据,用于发布和订阅网站内容,使得用户无需访问各个网站就能获取最新...
从提供的文件信息中,我们可以看到《电脑报2019年第17期》的内容包括各种电脑相关的技术文章、新闻和指导。由于文件内容的具体部分没有提供有效的文字信息,而是呈现了一系列的乱码,因此无法直接从中抽取知识点。...
在IT行业中,C# ASP.NET PDF阅读器是一个用于在Web应用程序中查看PDF文档的重要工具。这个控件允许用户在线预览PDF文件,而无需在本地安装Adobe Acrobat或其他PDF阅读器软件。下面将详细介绍C# ASP.NET PDF阅读器的...
【C# RSS阅读器】是一个使用C#编程语言编写的软件应用,专为解析和阅读RSS(Really Simple Syndication) feeds而设计。RSS是一种XML格式,用于发布新闻、博客和其他在线内容,允许用户订阅并获取更新,而无需手动...