Как удалить текст между тегами в c #?

Following HTML statements are stored in a string. I need to remove the text written between the HTML tags

<html> <head></head>  <body marginwidth="0" marginheight="0" leftmargin="10" topmargin="0" >
    </body>
    </html>

Как решить эту проблему с помощью кода c #?

2
@ gap.dev Пробовал ли вы мой код?
добавлено автор vikas, источник
@ gap.dev pls отметьте его как ans
добавлено автор vikas, источник
@vikas, да, это работает для меня, спасибо u
добавлено автор tilak, источник

7 ответы

Используйте HtmlAgilityPack для загрузки файла Html.

Откройте файл:

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(myHtmlString);

Затем удалите узлы:

foreach(var descendant in htmlDocument.DocumentNode.Descendants("style").ToList())
    descendant.Remove()

Затем получите строку, представляющую файл HTML:

string htmlWithoutStyle = htmlDocument.DocumentNode.OuterHtml;
7
добавлено
поиск и удаление текста между ними. на самом деле нет синтаксического анализа, необходимого для этого.
добавлено автор eMi, источник
@AshBurlaczenko Parsing html - довольно сложный бизнес. Конечно, вы можете придумать определенный «парсер» для решения этой проблемы, но почему бы просто не использовать существующую библиотеку для решения проблемы в минимальное время? Ручной анализ html (с регулярным выражением, возможно) является злом.
добавлено автор spender, источник
@PaulRuane Библиотеки и инструменты, по-видимому, не нужны для программирования. Мы все должны писать наши программы в двоичном машинном коде, потому что мы хардкор.
добавлено автор spender, источник
@AshBurlaczenko, что произойдет, если на странице есть несколько ярлыков стиля? Решение заменить не получится.
добавлено автор Marco Staffoli, источник
Для этого нет необходимости импортировать дополнительную библиотеку.
добавлено автор Ash Burlaczenko, источник
Зачем нужен парсинг? Вы находите начало и конец и удаляете любой текст между ними.
добавлено автор Ash Burlaczenko, источник
@splender, зачем загружать ненужную библиотеку в память, когда она вам не нужна. У ОП есть особые требования, которые могут быть выполнены без этого.
добавлено автор Ash Burlaczenko, источник
@AshBurlaczenko Разбор Html не так прост, как вы думаете.
добавлено автор Cédric Bignon, источник
@AshBurlaczenko: в то время как легко найти решение, которое работает в подавляющем большинстве случаев, эти грубые решения, которые ищут теги или части тегов, могут легко сломаться. Каково ваше отвращение, для использования дополнительной динамически связанной библиотеки?
добавлено автор Paul Ruane, источник
@AshBurlaczenko Итак, вы предпочли бы написать длинный код котельной плиты для сравнения строк?
добавлено автор Nathan White, источник
string str = "<html> <head></head> </html>";
            Console.WriteLine(str);
            string strToRemove = str.Substring(str.IndexOf("") - str.IndexOf("
1
добавлено

Используйте HtmlAgilityPack. Не пытайтесь опрокинуть свой собственный парсер.

var doc=new HtmlDocument();
doc.LoadHtml(html);
doc.DocumentNode.SelectSingleNode("//style").RemoveAllChildren();
using(var sw=new StringWriter())
{
    doc.Save(sw);
    var moddedHtml=sw.ToString();
}
1
добавлено

Вы можете решить эту проблему с помощью htmlagilitypack . Этот инструмент предназначен для синтаксического разбора html и т. Д. Написание регулярного выражения или его синтаксическое разборничество приведет вас только к неприятностям и может привести к securtyrisks в вашей программе.

1
добавлено
_htmlContent = Regex.Replace(_htmlContent, "< style.*?< /style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);

Try this. And please remove the extraspace after the less than < sign if you are feeling lazy and wanna copy paste the code.

1
добавлено

Здесь нет необходимости использовать дополнительные библиотеки. Попробуйте что-то вроде этого.

// Find the start tag
var start = html.IndexOf("") + 8;

// Remove the tag using Substring
var newHtml = html.Substring(0, start - 1) + html.Substring(end);
0
добавлено
-1. является закрывающим тегом. Как вы справитесь с этим? Используйте правильный парсер.
добавлено автор spender, источник

Вы можете использовать дополнительную библиотеку или просто удалить строку ...

RemoveHTMLTagsText("your html statement", "