Як видалити текст між тегами в 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, джерело
@Вікас, так, це працює для мене, дякую тобі
додано Автор 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 Розбір HTML-коду є досить хитрий бізнес. Звичайно, для вирішення цієї проблеми ви можете знайти конкретний «синтаксичний аналізатор», але чому б не використовувати існуючу бібліотеку для вирішення проблеми в мінімальний час? Ручний аналіз html (за допомогою регулярного виразу, можливо) є злом.
додано Автор spender, джерело
@PaulRuane Бібліотеки та інструменти, очевидно, не потрібні для програмування. Ми повинні писати наші програми в бінарному машинному коді, тому що ми хардкор.
додано Автор spender, джерело
@AshBurlaczenko що трапиться, якщо у вас більше ніж одна пара тегів стилю на сторінці? Рішення замінити не буде.
додано Автор Marco Staffoli, джерело
Для цього не потрібно імпортувати додаткову бібліотеку.
додано Автор Ash Burlaczenko, джерело
Чому потрібна синтаксична аналізація? Ви можете знайти початок і кінець і видалити будь-який текст між ними.
додано Автор Ash Burlaczenko, джерело
@splender, чому завантажуйте непотрібну бібліотеку в пам'ять, коли вона вам не потрібна. ОП має конкретні вимоги, які можна виконати без цього.
додано Автор Ash Burlaczenko, джерело
@AshBurlaczenko Html parsing не так просто, як ви можете думати.
додано Автор 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 та ін. Написання регулярного виразу або аналізу його самостійно призведе до неприємностей і може призвести до виникнення проблем у вашій програмі.

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", "