我们学院的网站做得很烂,上面的新闻不提供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的方法进行,不过效率可能受到 一点影响。
读取新闻的代码很简单,就不做任何解析了,不明白的可以留言,我会尽力回答的。
本文配套源码