使用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,