Cambiar etiqueta en texto interno con HTML PACK DE AGILIDAD

c# html html-agility-pack

Pregunta

Estoy usando HTML Agility Pack, y estoy tratando de reemplazar el texto interior de algunas etiquetas como esta

protected void GerarHtml()
{
    List<string> labels = new List<string>();

    string patch = @"C:\EmailsMKT\" + 
                              Convert.ToString(Session["ssnFileName"]) + ".html";

     DocHtml.Load(patch);

     //var titulos = DocHtml.DocumentNode.SelectNodes("//*[@class='lblmkt']");

     foreach (HtmlNode titulo in
              DocHtml.DocumentNode.SelectNodes("//*[@class='lblmkt']"))
     {
          titulo.InnerText.Replace("test", lbltitulo1.Text);
     }

     DocHtml.Save(patch);

}

el html:

<.div><.label id="titulo1" class="lblmkt">teste</label.><./Div>

Respuesta aceptada

Las cadenas son inmutables (deberías poder encontrar mucha documentación sobre esto).
Los métodos de la clase String no alteran la instancia, sino que crean una nueva cadena modificada.

Por lo tanto, su llamada a:

titulo.InnerText.Replace("test", lbltitulo1.Text);

no altera InnerText, pero devuelve la cadena que desea que sea InnerText.

Además, el texto interno es de solo lectura; Tendrá que usar el texto como aparece en Establecer texto interno con HtmlAgilityPack

En su lugar, intente la siguiente línea (asigne nuevamente el resultado de la operación de cadena a la propiedad):

titulo.Text = titulo.Text.Replace("test", lbltitulo1.Text);

Respuesta popular

Pude obtener el resultado de esta manera:

HtmlTextNode Hnode = null;
Hnode = DocHtml.DocumentNode.SelectSingleNode("//label[@id='titulo1']//text()") as HtmlTextNode;
Hnode.Text = lbltitulo1.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é