Reemplazo de una etiqueta HTML InnerText usando HTML Agility Pack

asp.net c# html-agility-pack html-parsing

Pregunta

Estoy usando el paquete de agilidad HTML para manipular y editar un documento HTML. Quiero cambiar el texto en el campo como este:

<div id="Div1"><b>Some text here.</b><br></div>

Estoy buscando actualizar el texto dentro de esta div para ser:

<div id="Div1"><b>Some other text.</b><br></div>

He intentado hacer esto usando el siguiente código, pero no parece estar funcionando porque la propiedad de texto interno es de solo lectura.

HtmlTextNode hNode = null;
hNode = hDoc.DocumentNode.SelectSingleNode("//div[@id='Div1']") as HtmlTextNode;
hNode.InnerText = "Some other text.";
hDoc.Save("C:\FileName.html");

¿Qué estoy haciendo mal aquí? Como se mencionó anteriormente, el texto interno es un campo de solo lectura, aunque está escrito en la documentación que "se obtiene o establece". ¿Hay un método alternativo a través del cual esto se puede hacer?

Respuesta aceptada

La expresión se usa aquí: //div[@id='Div1'] selecciona el div , que no es un HtmlTextNode , por lo que la variable hNode mantiene null en su ejemplo.

La propiedad InnerText es realmente de solo lectura, pero HtmlTextNode tiene la propiedad Text que podría usarse para establecer el valor necesario. Pero antes de esto debes obtener ese nodo de texto. Esto se puede hacer fácilmente con esta expresión: //div[@id='Div1']//b//text() :

hNode = hDoc.DocumentNode
    .SelectSingleNode("//div[@id='Div1']//b//text()") as HtmlTextNode;
hNode.Text = "Some other text.";


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué