Gibt es eine Möglichkeit HTML-Knoten durch Textknoten mit HTMLAgilityPack zu ersetzen?

c# dom html html-agility-pack

Frage

Ich möchte HTMLAgility Pack verwenden, um einen Knoten innerhalb des Dokuments durch einen Textknoten zu ersetzen. Der Zweck ist das Entfernen von Tags, die den Knoten selbst umgeben. Momentan mache ich so etwas:

//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);

Gibt es einen besseren Weg, dies zu tun? Wenn ich versuche, einen neuen Textknoten zu erstellen, und dann etwas wie das folgende Code-Snippet zu tun, erhalte ich einen ungültigen Cast-Fehler:

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

(aktualisiert, nachdem auf einen Tippfehler hingewiesen wurde, das Problem bleibt jedoch bestehen)

Benutze ich die Methode falsch? Gibt es eine andere Methode, die ich verwenden soll, um solche Funktionen auszuführen? Vielen Dank.

Beliebte Antwort

Der Zweck ist das Entfernen von Tags, die den Knoten selbst umgeben

Ihr zweiter abgeschnittener Code führt genau das Entfernen von Tags durch, außer einem Tippfehler (ich denke):

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

Sie sollten hNewNode.InnerHtml durch hChildNode.InnerHtml ersetzen, sonst wird Ihr Code nicht einmal kompiliert (Verwendung von nicht zugewiesenen Variablen).

Auch möchte ich erwähnen, dass nach der Erstellung des InnerHtml Knoten der ersetzten haben (stattdessen wird es den gleichen Wert für die InnerHtml Eigenschaft mit dem Knoten ersetzt haben).



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