国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#移除HTML標記

2019-11-17 03:12:43
字體:
來源:轉載
供稿:網友

C#移除HTML標記

  移除一段文字中的HTML標記,以消除其中包含的樣式和段落等,最常用的辦法可能就是正則表達式了。但是請注意,正則表達式并不能處理所有的HTML文檔,所以有時采用一個迭代的方式會更好,如for循環。看下面的代碼:

using System;using System.Text.RegularExPRessions;/// <summary>/// Methods to remove HTML from strings./// </summary>public static class HtmlRemoval{    /// <summary>    /// Remove HTML from string with Regex.    /// </summary>    public static string StripTagsRegex(string source)    {        return Regex.Replace(source, "<.*?>", string.Empty);    }    /// <summary>    /// Compiled regular expression for performance.    /// </summary>    static Regex _htmlRegex = new Regex("<.*?>", RegexOptions.Compiled);    /// <summary>    /// Remove HTML from string with compiled Regex.    /// </summary>    public static string StripTagsRegexCompiled(string source)    {        return _htmlRegex.Replace(source, string.Empty);    }    /// <summary>    /// Remove HTML tags from string using char array.    /// </summary>    public static string StripTagsCharArray(string source)    {        char[] array = new char[source.Length];        int arrayIndex = 0;        bool inside = false;        for (int i = 0; i < source.Length; i++)        {            char let = source[i];            if (let == '<')            {                inside = true;                continue;            }            if (let == '>')            {                inside = false;                continue;            }            if (!inside)            {                array[arrayIndex] = let;                arrayIndex++;            }        }        return new string(array, 0, arrayIndex);    }}

  代碼中提供了兩種不同的方式來移除給定字符串中的HTML標記,一個是使用正則表達式,一個是使用字符數組在for循環中進行處理。來看一下測試的結果:

using System;using System.Text.RegularExpressions;class Program{    static void Main()    {        const string html = "<p>There was a <b>.NET</b> programmer " +            "and he stripped the <i>HTML</i> tags.</p>";        Console.WriteLine(HtmlRemoval.StripTagsRegex(html));        Console.WriteLine(HtmlRemoval.StripTagsRegexCompiled(html));        Console.WriteLine(HtmlRemoval.StripTagsCharArray(html));    }}

  輸出結果如下:

There was a .NET programmer and he stripped the HTML tags.There was a .NET programmer and he stripped the HTML tags.There was a .NET programmer and he stripped the HTML tags.

  上述代碼中分別調用了HtmlRemoval類中的三個不同的方法,均返回了相同的結果,即去除了給定字符串中的HTML標記。推薦使用第二種方法,即直接引用一個預先定義好的RegexOptions.Compiled的正則表達式對象,它比第一種方法速度更快。但是RegexOptions.Compiled有一些缺點,在某些情況下它的啟動時間會增加數十倍。具體的內容可以查看下面這兩篇文章:

RegexOption.Compiled

Regex Performance

  通常,正則表達式的執行效率并不是最高的,所以HtmlRemoval類中給定了另一種方法,使用字符數組來處理字符串。測試程序提供了1000個HTML文件,每個HTML文件中有大約8000個字符,所有的文件均通過File.ReadAllText方式進行讀取,測試結果顯示字符數組的方式執行速度是最快的。

Performance test for HTML removalHtmlRemoval.StripTagsRegex:         2404 msHtmlRemoval.StripTagsRegexCompiled: 1366 msHtmlRemoval.StripTagsCharArray:      287 ms [最快]File length test for HTML removalFile length before:                 8085 charsHtmlRemoval.StripTagsRegex:         4382 charsHtmlRemoval.StripTagsRegexCompiled: 4382 charsHtmlRemoval.StripTagsCharArray:     4382 chars

  所以,使用字符數組來處理大批量的文件時可以節省時間。在字符數組方法中,僅僅只是將非HTML標記的字符添加到數組緩沖區,為了提高效率,它使用字符數組和一個新的字符串構造器來接收字符數組和范圍,這個會比使用StringBuilder速度更快。

對于自關閉的HTML標記

  在XHTML中,某些標記并不具有獨立的關閉標簽,如<br/>,<img/>等。上述代碼應該能夠正確處理自關閉的HTML標記。下面是一些支持的HTML標記,注意,正則表達式方法可能無法正確處理無效的HTML標記。

Supported tags<img src="" /><img src=""/><br /><br/>< div ><!-- -->

HTML文檔中的注釋

  本文給出的代碼對移除HTML文檔注釋中的HTML標記可能會失效。有些時候,注釋中可能會包含一些無效的HTML標記,在處理時這些HTML標記不會被完全移除。但是,掃描這些不正確的HTML標記有時可能是必要的。

如何驗證

  有許多種方法可以用來驗證XHTML,我們可以采用和上面代碼相同的方式來進行迭代。一個簡單的方法是對'<'和'>'進行計數,從而確定它們是否匹配,或者采用正則表達式進行匹配。這里有一些資源介紹了這些方法:

HTML Brackets: Validation

Validate XHTML

  有許多方法都可以用來去除給定字符串中的HTML標記,它們返回的結果也都是正確的。毫無疑問,采用字符數組進行迭代的效率最高。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滦南县| 南岸区| 衡东县| 泌阳县| 崇信县| 炉霍县| 天台县| 太湖县| 周宁县| 扬中市| 葫芦岛市| 哈尔滨市| 宝坻区| 卓尼县| 玛曲县| 安义县| 应用必备| 临潭县| 定结县| 奉化市| 古蔺县| 阜新市| 青川县| 石家庄市| 高要市| 长春市| 大安市| 平乐县| 广南县| 新安县| 通化市| 玛曲县| 舞钢市| 东乌| 修文县| 墨竹工卡县| 永川市| 古浪县| 临漳县| 梅河口市| 十堰市|