解析dom树和生成rss
我们学院的网站做得很烂,上面的新闻不提供rss订阅,每次看新闻都要跑到网站上去,非常不方便。我现在是就业负责人,万一上面有什么新的通知没有看到,那我的责任就大了。昨天,突然有一个想法,就是自己为其实现一个rss feed。
首先我考虑的是用rsslib,但发现rss lib生成的xml,普通的rss订阅器不识别,没办法,只能自己想办法解决,最后自己观察了一个rss的feed,了解了一下基本结构后自己实现了一个。主要有RssDocument、RssChannel、RssImage、RssItem几个类。其中RssDocument中含有一个RssChannel,RssChannel中含有一个RssImage和多个RssItem。他们的类关系图如下:
各个类的代码就不解释了,都和简单。唯一值得一提是使用XmlDocument进行操作,这样做的目的:一个是使用XmlDocument的效率较高,另外一个就是不容易出现错误。当然也可以使用StringBuilder直接对字符串进行操作。
另外,一件要解决的事情就是如何解析html的问题,开始想用HtmlDocument,后来发现它使用起来不是很方便,而且效率也不高。但C#中没有提供其他的操作html的工具,我上网上找了一下,发现一个很好的东西SgmlReader,它可以将html转成标准的xhtml。这样的话,我们就可以用XmlDocument操作转换后的html了,转换的函数如下:
public XmlDocument ConvertHtml2Xhtml(string html)
{
using (SgmlReader reader = new SgmlReader())
{
reader.DocType = "HTML";
reader.InputStream = new StringReader(html);
using (StringWriter stringWriter = new StringWriter())
{
using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
{
reader.WhitespaceHandling = WhitespaceHandling.None;
writer.Formatting = Formatting.Indented;
XmlDocument doc = new XmlDocument();
doc.Load(reader);
return doc;
}
}
}
}
下面的工作主要就是分析我们学院网站上新闻的源代码了,找到我要提取的新闻在dom中的位置,为了速度,我直接从根往下找的,为了方便也可以使用getElementsByTagName的方法进行,不过效率可能受到一点影响。
读取新闻的代码很简单,就不做任何解析了,不明白的可以留言,我会尽力回答的。
该程序源码如下:https://files.cnblogs.com/dlutwy/rss.zip
在程序中我设置了两种访问办法:第一种是http://localhost/rss/student.rss的方式,这web.config中设置了handle,但是我发现这种方式在我的免费空间中不好用,所以又写了一种方式:http://localhost/rss/rss.ashx?name=student.rss。
现在我已将其发布在我的空间中,软件学院的同学可以通过rss阅读器订阅学院公告了,订阅地址如下:
1、学生周知:http://aspspider.info/wangyou/rss.ashx?name=student.rss
2、教工周知:http://aspspider.info/wangyou/rss.ashx?name=teacher.rss
3、学院新闻:http://aspspider.info/wangyou/rss.ashx?name=news.rss
对于就业信息,我没有时间去分析那html,有想实现的可以加上。由于我的免费空间是国外的,所以访问起来可能会比较慢。如果你又任何问题,都请留言,谢谢。
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。