Html Agility Pack - удалить элемент, но не innerHtml

c# html html-agility-pack

Вопрос

Я могу легко удалить элемент только с помощью note.Remove () lik this:

HtmlDocument html = new HtmlDocument();

html.Load(Server.MapPath(@"~\Site\themes\default\index.cshtml"));

foreach (var item in html.DocumentNode.SelectNodes("//removeMe"))
{
    item.Remove();
}

Но это также удаляет innerHtml. Что делать, если я хочу только удалить тег и сохранить innerHtml?

Пример:

<ul>
    <removeMe>
        <li>
            <a href="#">Keep me</a>
        </li>
    </removeMe>
</ul>

Любая помощь будет оценена :)

Принятый ответ

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var node = doc.DocumentNode.SelectSingleNode("//removeme");
node.ParentNode.RemoveChild(node, true);

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

Существует проблема с реализацией bool KeepGrandChildren для людей, которые могут иметь текст с элементом, который они пытаются удалить. Если в теге removeeme есть текст, текст также будет удален. Например, <removeme>text<p>more text</p></removeme> станет <p>more text</p>

Попробуй это:

private static void RemoveElementKeepText(HtmlNode node)
    {
        //node.ParentNode.RemoveChild(node, true);
        HtmlNode parent = node.ParentNode;
        HtmlNode prev = node.PreviousSibling;
        HtmlNode next = node.NextSibling;

        foreach (HtmlNode child in node.ChildNodes)
        {
            if (prev != null)
                parent.InsertAfter(child, prev);
            else if (next != null)
                parent.InsertBefore(child, next);
            else
                parent.AppendChild(child);

        }
        node.Remove();
    }


Related

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