HtmlAgilityPack set node InnerText

c# html-agility-pack html-parsing parsing

Pregunta

Quiero reemplazar el texto interno de las etiquetas HTML con otro texto. Estoy usando HtmlAgilityPack
Uso este código para extraer todos los textos.

HtmlDocument doc = new HtmlDocument();
doc.Load("some path")

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']")) {
    // How to replace node.InnerText with some text ?
}

Pero el texto interno es de solo lectura. ¿Cómo puedo reemplazar textos con otro texto y guardarlos en un archivo?

Respuesta aceptada

Trate el código de abajo. Selecciona todos los nodos sin hijos y filtra los nodos de script. Tal vez necesite agregar algún filtro adicional. Además de su expresión XPath, esta también busca nodos de hoja y filtra el contenido de texto de las etiquetas <script> .

var nodes = doc.DocumentNode.SelectNodes("//body//text()[(normalize-space(.) != '') and not(parent::script) and not(*)]");
foreach (HtmlNode htmlNode in nodes)
{
    htmlNode.ParentNode.ReplaceChild(HtmlTextNode.CreateNode(htmlNode.InnerText + "_translated"), htmlNode);
}

Respuesta popular

Extraño, pero encontré que InnerHtml no es de solo lectura. Y cuando intenté ponerlo así.

aElement.InnerHtml = "sometext";

el valor de InnerText también cambió a "sometext"



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