以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML源码及示例(仅原创和转载) 』 (http://bbs.xml.org.cn/list.asp?boardid=32) ---- 实例:用Visual C#制作新闻阅读器 [转载] (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=46607) |
-- 作者:supremeweb -- 发布时间:5/9/2007 10:41:00 AM -- 实例:用Visual C#制作新闻阅读器 [转载] 一、弄清结构再动手 要想轻松的抽取RSS信息,自然先要了解它的结构,所谓“知己知彼,百战不殆”嘛。 1、RSS的结构 我们先打开[URL=http://com.chinabyte.com/baidu/]百度[/URL]新闻一个RSS链接,如果你再多打开几个别的网站的RSS链接,会发现他们都有大致相同的结构。而我们在揭秘RSS(上)中为大家讲解的其实就是编成实现这样的一个[URL=http://dev.21tx.com/dotnet/xml/]XML[/URL]文件。 为了能够方便地对这样的[URL=http://dev.21tx.com/web/xml/]XML[/URL]文档进行处理,在本文里,我们使用[URL=http://dev.21tx.com/dotnet/csharp/]C#[/URL]作为开发的语言。 分析整个RSS链接后,我们知道RSS大致的结构入图1。 2、抽取的原理 知道了结构,我们还要知道结构中各部分的含义。在图1中RSS节点表示当前是一个RSS文件,它由一个[URL=http://searchwhatis.techtarget.com.cn/searchwhatis/141/1947141.shtml]CHANNEL[/URL]节点及其子节点组成,其中一些子节点提供关于频道本身的信息,比如title表示频道的名称(“百度[URL=http://news.21tx.com/net/]互联网[/URL]新闻”)。 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 struct Item Channel结构将存储CHANNEL节点包含的所有子节点信息,其中Items成员字段是一个Hashtable集合,程序会将Item结构作为对象加入集合,用来存储Channel下的所有Item节点。这里我只读取了有限的几个节点,读者可以根据实际需要扩展整个结构定义。 现在我们就可以开始编写读取函数,将抽取出的RSS信息放入上面设计好的结构中。 C#提供了专门的类来访问[URL=http://searchwhatis.techtarget.com.cn/searchwhatis/203/1949203.shtml]XML[/URL], 使我们能够轻松地读出RSS的内容。代码如下: 以下是引用片段: 使用XmlDocument类将txtURL中输入的RSS链接加载后,首先通过FoundChildNode函数,找到Channel节点。 以下是引用片段: 然后我们就可以遍历它的子节点,根据子节点的Name属性,读取我们需要的信息。 以下是引用片段: 如果发现是item子节点,就调用getRssItem函数,同样通过遍历子节点的方法,将其子节点内容填入Item结构中,然后再添加到Channel结构的Items集合中。因为本程序并不关心添加到集合的键值,只需要它是不重复的值,所以我传入了Count属性。 3.将读出的信息显示在程序中 将RSS内容读出后,就需要把信息展示给用户了。我们这里用的是基本的TreeView方法,通过遍历Channel结构的Items集合,将其标题添加到TreeView中。 以下是引用片段: 同时我们还可以设置TreeView的每个子节点的Tag属性为它对应的链接。以便当选中子节点时就可以通过读取Tag属性访问具体的信息。 以下是引用片段: 程序运行效果如图2。 怎么样,一个简单的RSS新闻阅读器就按前面所说轻松完成了,容易吧。虽然它还有很多不足,但如果大家通过这个例子学会了抽取RSS链接信息的基本方法,那就足够了!
|
-- 作者:Qr -- 发布时间:5/10/2007 4:48:00 PM -- 不错。 |
-- 作者:lovesky20008 -- 发布时间:5/19/2007 11:43:00 PM -- 好东西。谢谢了啊 |
-- 作者:龙藤 -- 发布时间:6/25/2007 10:22:00 PM -- 谢谢! |
-- 作者:依窗听雨 -- 发布时间:7/26/2007 7:43:00 PM -- 这个程序不错 实验一下。。。。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
54.688ms |