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.
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).