Html Agility Pack - Entferne Element, aber nicht innerHtml

c# html html-agility-pack

Frage

Ich kann das Element einfach durch note.Remove () entfernen.

HtmlDocument html = new HtmlDocument();

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

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

Aber das entfernt auch den inneren HTML. Was ist, wenn ich nur das Tag entfernen und das innere HTML behalten möchte?

Beispiel:

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

Jede Hilfe wäre willkommen :)

Akzeptierte Antwort

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

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

Beliebte Antwort

Es gibt ein Problem mit der bool KeepGrandChildren-Implementierung für Personen, die möglicherweise Text mit dem Element haben, das sie entfernen möchten. Wenn das removeme -Tag Text enthielt, wird der Text ebenfalls entfernt. Zum Beispiel <removeme>text<p>more text</p></removeme> wird <p>more text</p>

Versuche dies:

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();
    }


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum