¿Hay alguna manera de reemplazar los nodos html con nodos de texto usando HTMLAgilityPack?

c# dom html html-agility-pack

Pregunta

Me gustaría usar el paquete HTMLAgility para reemplazar un nodo dentro del documento con un nodo de texto. El propósito de esto es eliminar las etiquetas que rodean el propio nodo. Actualmente, hago algo como esto:

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

¿Hay una mejor manera de hacer esto? Si intento crear un nuevo nodo de texto y luego hago algo como el fragmento de código a continuación, recibo un error de conversión no válido:

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

(actualizado después de que se señaló un error tipográfico, sin embargo, el problema sigue siendo)

¿Estoy usando el método equivocado? ¿Hay algún otro método que deba utilizar para realizar funciones como esta? Gracias.

Respuesta popular

El propósito de esto es eliminar las etiquetas que rodean el propio nodo

Su segundo código cortado realiza exactamente la eliminación de etiquetas excepto un error tipográfico (supongo):

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

Debe reemplazar hNewNode.InnerHtml por hChildNode.InnerHtml contrario, su código ni siquiera se compilará (uso de una variable no asignada).

También quiero mencionar, después de la creación del nodo de texto, no tendrá nodos secundarios del reemplazado (en lugar de esto, tendrá el mismo valor para la propiedad InnerHtml con el nodo reemplazado).



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow