Вопрос по c#, html – Как очистить теги HTML с помощью C #

23

Например:

<code><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>
</code>

и результат:

<code> I want to get this text 
this is my want!!
this is my want!!!
</code>
Нет! Просто содержание тела! guaike
@ Марк Грэвелл - Да, в этом суть guaike
Он в основном хочет сериализовать HTML, который выглядит как ... просто убрать всю разметку и оставить только данные. Polaris878
@ Самир - Я считаю, что смысл здесь также состоит в том, чтобы обслуживать искаженный HTML, а не только HTML. Marc Gravell♦
На самом деле не имеет отношения к вопросу, но кое-что вы должны знать: закрывающие теги имеют & quot; / & quot; в них. Например, & lt; h1 & gt; это мое желание !! & lt; / h1 & gt; & quot; - обратите внимание на & lt; / h1 & gt ;. Samir Talwar

Ваш Ответ

6   ответов
16

Используйте эту функцию ...

public string Strip(string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}
Лучшее регулярное выражение<[^>]*> как? в том, что делает это довольно медленно.
stackoverflow.com/a/1732454/164247 достаточно
@ mehaase, я использую этот синтаксический анализ в некоторых кодах до того дня (март 2013). Но на самом деле я использую библиотеку «HtmlAgilityPack».
Ick, этот вопрос многократно повторяется в SO, и этот же плохой ответ тоже повторяется. Как я уже говорил в другом идентичном посте: «Вы не должны использовать регулярное выражение для синтаксического анализа грамматики без контекста, такой как HTML. Если HTML предоставляется какой-либо внешней сущностью, его можно легко манипулировать, чтобы избежать вашего регулярного выражения. & Quot;
30

HTML Agility Pack:

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    string s = doc.DocumentNode.SelectSingleNode("//body").InnerText;
У меня есть другая проблема при применении вашего кода, что символы apersand (& amp;), @ nbsp, gt и lt все еще существуют и вызывают у меня неправильный текст, как я могу удалить подобные символы
@ Ахми, вы уверены, что используете пакет для ловкости?
Ohhhhhhh! Извините, сэр, я не включил ссылку на пакет аджилити ... спасибо Марк
хорошо, я решил это с помощью Server.HtmlDecode ()
HtmlDocument не имеет конструкторов и не содержит метод LoadHtml () или свойство DocumentNode ... Я пытаюсь этот код в VC2010, не могли бы вы мне помочь?
1

Я бы порекомендовал использовать что-то вродеHTMLTidy.

Вот учебник на нем, чтобы вы начали.

2 Kiquenet, но это круто!
Tidy является компонентом COM? последняя версия в 2003 году? много лет назад...
0

Почему вы хотите сделать это на стороне сервера?

Для этого вы должны сделать элемент контейнераrunat="server" а затем взятьinnerText элемента.

Вы можете сделать то же самое в javascript, не устанавливая элемент runat = & quot; server & quot;

Я занимаюсь разработкой новостной системы, и я бы хотел, чтобы ее перехватили в виде сводки какого-либо новостного контента, отображаемого на главной странице. guaike
0

Вы можете начать с этой простой функции ниже.Disclaimer: This code is suitable for basic HTML, but will not handle all valid HTML situations and edge cases. Tags within quotes is an example. Преимущество этого кода в том, что вы можете легко следить за выполнением в отладчике, и его можно легко модифицировать в соответствии с конкретными для вас крайними случаями.

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;        
    }
Это в основном просто развернутая версия ответа на регулярное выражение, приведенное выше, и, как таковая, она не является более надежной. Это легко может быть отброшено, например, атрибутом в кавычках, который содержит "& gt;", не говоря уже о патологическом случае, подобном приведенному здесь:stackoverflow.com/questions/5175840/….
@Annie К сожалению, он не будет работать с тегами, содержащимися в кавычках, как есть. Вы можете изменить его, чтобы поймать эти крайние случаи.
Это пройдет<div title="x<4>" id="vectorizer"> text here <img class="foo"> text there</div>?
0

Если вы просто хотите удалить теги html, используйте регулярное выражение, которое удаляет что-либо между & quot; & lt; & quot; и "& gt;".

Я немного беспокоюсь о том, что регулярное выражение так медленно guaike

Похожие вопросы