程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 解析dom樹和生成rss

解析dom樹和生成rss

編輯:關於ASP.NET

我們學院的網站做得很爛,上面的新聞不提供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的方法進行,不過效率可能受到 一點影響。

讀取新聞的代碼很簡單,就不做任何解析了,不明白的可以留言,我會盡力回答的。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved