修剪html文本c#的一部分而不修剪html标记

时间:2011-08-22 15:34:14

标签: c# html

我需要为一段html文本生成摘录,我不能只使用Substring方法,因为我可以修剪一个标记,是否有一个函数需要考虑标记,以便它跳过标记结束?

3 个答案:

答案 0 :(得分:1)

我认为HTML Agility Pack将提供您所需的功能:

How to use HTML Agility pack

Getting the text from a node using HtmlAgilityPack

答案 1 :(得分:1)

没有“功能”可以做你想做的事情,你必须使用HTML解析器(例如Russ C建议的那个)并迭代所有节点。

而且,请请do not try with regular expressions(我只是在这里积极主动)。

答案 2 :(得分:0)

如ckittel所述,一个例子会有所帮助。如果我确实得到了你的问题,那就没有这样的内置功能。<​​/ p>

根据您的需要和您正在处理的HTML类型,您可以使用简单的基于正则表达式的方法,该方法从文本中删除html标记并解码html实体:

public static string StripHTML(string HTMLText)
{
    string ret = HTMLText.Replace("<br>", "\n").Replace("<br />", "\n");
    Regex reg = new Regex("<[^>]+>", RegexOptions.IgnoreCase);
    return HttpUtility.HtmlDecode(reg.Replace(ret, ""));
}

如果您使用以下代码测试此代码..

string longHtmlText = "<html>This is a &quot;<b>long &amp; bolded</b> <a href=\"http://en.wikipedia.org/wiki/HTML\">HTML</a> text</html>&quot;";
string excerpt = StripHTML(longHtmlText);
excerpt = excerpt.Substring(0, 30) + "(..)";

..结果将是......

  

这是一个“长而粗体的HTML(..)

..应该回答你的问题。

请记住,正如Albireo注意到的,Regex与HTML解析完全不同......但如果您需要快速HTML剥离和修剪(对于简单的HTML文本)而没有外部组件,这段代码可能就足够了。