|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然……visual 1、弄清布局再下手
要想轻松的抽取RSS信息,天然先要懂得它的布局,所谓“亲信知彼,百战百胜”嘛。
1、RSS的布局
我们先翻开百度旧事一个RSS链接,假如你再多翻开几一般的网站的RSS链接,会发明他们都有大抵不异的布局。而我们在揭秘RSS(上)中为人人解说的实在就是编成完成如许的一个XML文件。
为了可以便利地对如许的XML文档举行处置,在本文里,我们利用C#作为开辟的言语。
剖析全部RSS链接后,我们晓得RSS大抵的布局进。
2、抽取的道理
晓得了却构,我们还要晓得布局中各部分的寄义。在中RSS节点暗示以后是一个RSS文件,它由一个CHANNEL节点及其子节点构成,个中一些子节点供应关于频道自己的信息,好比title暗示频道的称号(“百度互联网旧事”)。
CHANNEL节点又包括多个ITEM子节点,而ITEM节点就是程序必要处置的部分,由于它对应着每条实践的旧事项信息,每一个ITEM节点又经由过程其子节点供应关于这条旧事的具体信息,好比title暗示旧事的题目(“微软IM称王”),link对应旧事实践的链接。
RSS详细标准可检察http://blogs.law.harvard.edu/tech/rss
晓得了这些后,要编程就不坚苦啦。我们只需提取并显现出CHANNEL和ITEM下的各条信息就能够了。如今来看看详细的完成办法吧。
二.做个程序读旧事
对RSS有必定懂得后,我们入手下手编写程序。先仍是必要一个最复杂的界面。新建一个WinForm工程,在Form上安排一个Label,一个文本框txtURL用来输出RSS链接(就是各网站RSS链接中包括的地点),一个按钮bnRead用来实行读取旧事,一个TreeView树形控件treeRSS显现读出的旧事项。
1、界说装载布局
依据下面剖析的RSS布局,我们起首来创建一个rss类,用它来装载RSS链接中CHANNEL和ITEM的各条信息。代码以下:
publicclassrss
{
publicstructChannel
{
publicstringTitle;
publicHashtableItems;
}
publicstructItem
{
publicstringTitle;
publicstringDescription;
publicstringLink;
}
}
Channel布局将存储CHANNEL节点包括的一切子节点信息,个中Items成员字段是一个Hashtable汇合,程序会将Item布局作为工具到场汇合,用来存储Channel下的一切Item节点。这里我只读取了无限的几个节点,读者能够依据实践必要扩大全部布局界说。
<P> 2、从RSS链接中猎取旧事信息
如今我们就能够入手下手编写读取函数,将抽掏出的RSS信息放进下面计划好的布局中。
C#供应了专门的类来会见XML,使我们可以轻松地读出RSS的内容。代码以下:
XmlTextReaderReader=newXmlTextReader(URL);
XmlValidatingReaderValid=newXmlValidatingReader(Reader);
Valid.ValidationType=ValidationType.None;
XmlDocumentxmlDoc=newXmlDocument();
xmlDoc.Load(Reader);
利用XmlDocument类将txtURL中输出的RSS链接加载后,起首经由过程FoundChildNode函数,找到Channel节点。
privateXmlNodeFoundChildNode(XmlNodeNode,stringName)
{
XmlNodechildlNode=null;
for(inti=0;i<Node.ChildNodes.Count;i++)
{
if(Node.ChildNodes.Name==Name&&Node.ChildNodes.ChildNodes.Count>0)
{
childlNode=Node.ChildNodes;
returnchildlNode;
}
}
returnchildlNode;
}
XmlNoderssNode=FoundChildNode(xmlDoc,"rss");
XmlNodechannelNode=FoundChildNode(rssNode,"channel");
然后我们就能够遍历它的子节点,依据子节点的Name属性,读取我们必要的信息。
rss.Channelchannel=newrss.Channel();
channel.Items=newHashtable();
{
switch(channelNode.ChildNodes.Name)
{
case"title":
{
channel.Title=channelNode.ChildNodes.InnerText;
break;
}
case"item":
{
rss.Itemitem=this.getRssItem(channelNode.ChildNodes);
channel.Items.Add(channel.Items.Count,item);
break;
}
}
}
假如发明是item子节点,就挪用getRssItem函数,一样经由过程遍历子节点的办法,将其子节点内容填进Item布局中,然后再增加到Channel布局的Items汇合中。由于本程序其实不体贴增加到汇合的键值,只必要它是不反复的值,以是我传进了Count属性。
3.将读出的信息显现在程序中
将RSS内容读出后,就必要把信息展现给用户了。我们这里用的是基础的TreeView办法,经由过程遍历Channel布局的Items汇合,将其题目增加到TreeView中。
privatevoidViewRss(rss.Channelchannel)
{
treeRss.BeginUpdate();
treeRss.Nodes.Clear();
TreeNodechannelNode=treeRss.Nodes.Add(channel.Title);
channelNode.Tag="";
for(inti=0;i<channel.Items.Count;i++)
{
rss.Itemitem=(rss.Item)channel.Items;
TreeNodeitemNode=channelNode.Nodes.Add(item.Title);
itemNode.Tag=item.Link;
}
treeRss.ExpandAll();
treeRss.EndUpdate();
}
同时我们还能够设置TreeView的每一个子节点的Tag属性为它对应的链接。以便利选中子节点时就能够经由过程读取Tag属性会见详细的信息。
privatevoidtreeRss_AfterSelect(objectsender,System.Windows.Forms.TreeViewEventArgse)
{
TreeNodeitemNode=e.Node;
stringURL=itemNode.Tag.ToString();
if(URL.Length!=0)
System.Diagnostics.Process.Start(URL);
}
程序运转效果如。
三.小结
怎样,一个复杂的RSS旧事浏览器就按后面所说轻松完成了,简单吧。固然它另有良多不敷,但假如人人经由过程这个例子学会了抽取RSS链接信息的基础办法,那就充足了!
有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库) |
|