C# 如何使用C清理HTML标记#

C# 如何使用C清理HTML标记#,c#,html,C#,Html,例如: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>title</title> </head> <body> <a href="aaa.asp?id=1"> I want to get this text </a> <div> <h1

例如:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>title</title>
</head>
<body>
    <a href="aaa.asp?id=1"> I want to get this text </a>
    <div>
        <h1>this is my want!!</h1>
        <b>this is my want!!!</b>
    </div>
</body>
</html>

我建议使用类似


开始使用它。

为什么要使用服务器端

为此,必须使容器元素
runat=“server”
,然后获取元素的
innerText

您可以在javascript中执行同样的操作,而无需使元素runat=“server”


如果只想删除html标记,请使用正则表达式删除“.”之间的任何内容。

使用此函数

public string Strip(string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}
公共字符串条(字符串文本)
{
返回Regex.Replace(text,@“”,string.Empty);
}

您可以从下面这个简单的函数开始。免责声明:此代码适用于基本HTML,但不会处理所有有效的HTML情况和边缘情况。引号内的标记就是一个例子。此代码的优点是,您可以轻松地在调试器中跟踪执行,并且可以轻松地修改它以适应特定于您的边缘情况

public static string RemoveTags(string html)
    {
        string returnStr = "";
        bool insideTag = false;
        for (int i = 0; i < html.Length; ++i)
        {
            char c = html[i];
            if (c == '<')    
                insideTag = true;
            if (!insideTag)
                returnStr += c;
            if (c == '>')         
                insideTag = false;
        }
        return returnStr;        
    }
publicstaticstringremovetags(stringhtml)
{
字符串returnStr=“”;
bool-insideTag=false;
for(int i=0;i
我正在开发一个新闻系统,我想截取一些在家中显示的新闻内容作为摘要。他基本上想序列化HTML,它看起来像。。。只需去掉所有标记,只留下数据。与问题无关,但有一点你应该明确知道:结束标记中有一个“/”。例如,“这是我想要的!!”-请注意“.@Samir-我相信这里的要点也是为了迎合格式错误的html-而不仅仅是xhtml。@Marc Gravell-是的,这就是要点使用此链接回答您的问题我有点担心正则表达式太慢了,因为TMLDocument没有构造函数,并且不包含LoadHtml()方法或者property DocumentNode…我正在VC2010中尝试此代码,您能帮我吗?@Ahmy您确定您正在使用agility pack吗?哦!对不起,先生,我没有包括agility pack ref…谢谢,Marci在应用您的代码时遇到了另一个问题,即apersand(&)、@nbsp、gt和lt字符仍然存在,并导致错误的文本,我如何消除这些字符。Marc我已禁止提问,这是最近。。当我读到这条错误信息时,我发现我没有犯任何禁令规则,我怎么能问我的问题??这是一种合乎道德的方式吗?一个更好的正则表达式是
]*>
,因为
中的正则表达式使它变得非常缓慢。哎呀,这个问题在SO中重复了很多次,同样的错误答案也重复了很多次。正如我在另一篇相同的帖子中所说:“你不应该使用正则表达式来解析像HTML这样的上下文无关语法。如果HTML是由某个外部实体提供的,那么它可以很容易地被操纵来避开你的正则表达式。”@mehaase,我在一些代码中使用这种解析,直到那天(2013年3月)。但实际上我使用的是“HtmlAgilityPack”库。这基本上只是上面正则表达式答案的展开版本,因此它不再健壮。例如,这很容易被包含“>”的带引号的属性抛出,更不用说像这里这样的病理病例:。它是否会传递
text here text那里
?@Annie不幸的是,它无法处理引号中包含的标记。您可以对其进行修改,以捕捉这些类型的边缘案例。
public string Strip(string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}
public static string RemoveTags(string html)
    {
        string returnStr = "";
        bool insideTag = false;
        for (int i = 0; i < html.Length; ++i)
        {
            char c = html[i];
            if (c == '<')    
                insideTag = true;
            if (!insideTag)
                returnStr += c;
            if (c == '>')         
                insideTag = false;
        }
        return returnStr;        
    }