Есть ли способ заменить узлы html на текстовые узлы, используя HTMLAgilityPack?

c# dom html html-agility-pack

Вопрос

Я хотел бы использовать пакет HTMLAgility для замены узла в документе текстовым узлом. Цель этого - удалить теги, окружающие сам узел. В настоящее время я делаю что-то вроде этого:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

Есть лучший способ сделать это? Если я попытаюсь создать новый текстовый узел, а затем сделаю что-то вроде фрагмента кода ниже, я получаю недопустимую ошибку:

foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
{
    HtmlNode hNewNode = hd.CreateTextNode(hChildNode.InnerHtml);
    hChildNode.ParentNode.ReplaceChild(hNewNode, hChildNode);
}

(обновляется после того, как была отмечена опечатка, однако проблема все еще остается)

Я использую метод неправильно? Есть ли другой метод, который я должен использовать для выполнения таких функций? Благодарю.

Популярные ответы

Цель этого - удалить теги, окружающие сам узел

Второй код, отрезанный, выполняет точно удаление тегов, за исключением одной опечатки (я думаю):

HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);

Вы должны заменить hNewNode.InnerHtml на hChildNode.InnerHtml иначе ваш код даже не будет компилироваться (использование неназначенной переменной).

Также хочу отметить, что после создания текстового узла у него не будут дочерние узлы замененного (вместо этого он будет иметь то же значение для свойства InnerHtml с замененным узлом).



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow