2012-02-01 19 views
6

Estoy usando HTML Agility Pack para manipular y editar un documento HTML. Quiero cambiar el texto en el campo como este:Reemplazar una etiqueta div HTML InnerText usando HTML Agility Pack

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

Busco para actualizar el texto dentro de este div 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 InnerText 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 InnerText es un campo de solo lectura, aunque está escrito en la documentación que "obtiene o establece". ¿Hay un método alternativo a través del cual esto se puede hacer?

Respuesta

9

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

La propiedad InnerText es realmente solo de lectura, pero HtmlTextNode tiene la propiedad Text que se puede usar para establecer el valor necesario. Pero antes de esto deberías obtener ese nodo de texto. Esto podría hacerse 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."; 
+0

¡Funciona como un encanto! Muchas gracias... – Vivek

Cuestiones relacionadas