解析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,有想实现的可以加上。由于我的免费空间是国外的,所以访问起来可能会比较慢。如果你又任何问题,都请留言,谢谢。

posted on 2009-04-05 13:39  小橋流水  阅读(2641)  评论(14编辑  收藏  举报

导航