准备工作:查了一个小时关于RSS的资料,浏览了一下CodePlex上关与RSS的一些项目。
笔记:rss2schema(这个项目很棒,实现了标准的RSS2.0的结构,可惜是没几个站点完整的遵循了这个标准,哪怕是sina,看那么多结构头都大了)、GizmoRSS(这个很实际,是个爱好者写的,代码很简单很容易看懂,但是很明显它的架构只适合小东西)、RSS文件结构(这个就不用多说了)。
测试要求:1)要求直接读取rss源(这个实现方法很多,标准的是用webclient,我用了简单的load函数,如果是真实的项目的话前者更好)2)正确读取sina和Oblog的源(这一条我测试了下,发现大多的rss源还是遵循rss2.0的标准的,不同的是大多不完整而已)。
测试结果图:
1.这个结果的部分截图
2.这个是结果中去掉description的截图
测试代码:
Code
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
namespace RssRead.test
{
public partial class DownLoad : System.Web.UI.Page
{
XmlDocument doc;
protected void Page_Load(object sender, EventArgs e)
{
string Olink = "http://feed.blueben.cn/";//oblog
string Slink = "http://blog.sina.com.cn/rss/1255849511.xml";//sina
ShowBlog(Olink);
ShowBlog(Slink);
}
private void ShowBlog(string link)
{
doc = new XmlDocument();
doc.Load(link);
foreach (XmlNode channel in FindNodes("channel"))
{
//channel
Response.Write("title:" + channel.SelectSingleNode("title").InnerText);
ChangeLine();
Response.Write("descriptoin:" + channel.SelectSingleNode("description").InnerText);
ChangeLine();
Response.Write("link:" + channel.SelectSingleNode("link").InnerText);
ChangeLine();
//item
int i = 1;
foreach (XmlNode item in channel.SelectNodes("item"))
{
Response.Write(string.Format("item{0}", i));
ChangeLine();
Response.Write("title:" + item.SelectSingleNode("title").InnerText);
ChangeLine();
Response.Write("description:" + item.SelectSingleNode("description").InnerText);
ChangeLine();
Response.Write("link:" + item.SelectSingleNode("link").InnerText);
ChangeLine();
i++;
}
}
ChangeLine();
}
private XmlNodeList FindNodes(string name)
{
return doc.GetElementsByTagName(name);
}
private void ChangeLine()
{
Response.Write("<br/>");
}
}
}