程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Subtext(9) -- SgmlReader

Subtext(9) -- SgmlReader

編輯:.NET實例教程

SgmlReader 在 Subtext 中的應用 。

SgmlReader是一款SGML解析器,通過解析html文件,並能有效的把html轉換為格式較規范的XHtml。當然你可能會說用.Net Framework提供的類就可以辦到了,但是總覺得使用起來不太方便(Html格式問題)。

下面就結合Subtext,來說明下它的使用。

在Subtext中,我們注意到有這麼一個函數ConvertHtmlToXHtml() (有2個重載函數),取出其核心內容來分析。代碼如下:



            SgmlReader reader = new SgmlReader();

            reader.DocType = "Html";

//指明文檔的根元素是Html
            reader.WhitespaceHandling = WhitespaceHandling.All;

//指明文檔處理空白的方式
            html = RemoveNewLineBeforeCDATA(Html);

//這是調用另外一個函數把CDATA前的換行符去除,不然解析會有問題
            reader.InputStream = new StringReader("" + Html + "");

//需要解析的Html內容
            reader.CaseFolding = CaseFolding.ToLower;

//指明解析後tag的大小寫

//下面調用Framework提供的類庫
            StringWriter writer = new StringWriter();
            XmlTextWriter XMLWriter = null;
            try
            ...{
                xmlWriter = new XMLTextWriter(writer); 

                while (reader.Read())
                ...{
                    XMLWriter.WriteNode(reader, true);
                }
            }
            finally
            ...{
                if (XMLWriter != null)
                ...{
                    XMLWriter.Close();
                }
            } 

            string XML = writer.ToString();
            return xml.Substring("".Length, XML.Length - "".Length);
        } 

 

附:

RemoveNewLineBeforeCDATA函數



      private static string RemoveNewLineBeforeCDATA(string text)
      ...{
         if (!String.IsNullOrEmpty(text))
         ...{
            string regex = @">( )+<![CDATA[";
            Regex newLineStripper = new System.Text.RegularExpressions.Regex(regex);

            return newLineStripper.Replace(text, "><![CDATA[");
         }
         return text;
      }

 

 測試你的Html代碼:

http://www.eggheadcafe.com/articles/html2xHtml/default.ASPx

參考資料:

SgmlReader 源碼及例子下載:

http://www.gotdotnet.com/Community/UserSamples/Details.ASPx?SampleGuid=B90FDDCE-E60D-43F8-A5C4-C3BD760564BC

SgmlReader Api 手冊:

http://www.telerik.com/help/radeditor/5.5/RadEditor~Telerik.WebControls.RadEditorUtils.SgmlReader_members.Html


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