J'utilise HTML Agility Pack et j'essaie de remplacer le texte InnerText de certaines balises comme celle-ci.
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);
}
le html:
<.div><.label id="titulo1" class="lblmkt">teste</label.><./Div>
Les chaînes sont immuables (vous devriez pouvoir trouver beaucoup de documentation à ce sujet).
Les méthodes de la classe String ne modifient pas l'instance, mais créent plutôt une nouvelle chaîne modifiée.
Ainsi, votre appel à:
titulo.InnerText.Replace("test", lbltitulo1.Text);
ne modifie pas InnerText, mais retourne la chaîne que vous souhaitez utiliser.
De plus, InnerText est en lecture seule; vous devrez utiliser du texte comme dans Set InnerText avec HtmlAgilityPack
Essayez plutôt la ligne suivante (affectez à nouveau le résultat de l'opération de chaîne à la propriété):
titulo.Text = titulo.Text.Replace("test", lbltitulo1.Text);
J'ai pu obtenir le résultat comme ceci:
HtmlTextNode Hnode = null;
Hnode = DocHtml.DocumentNode.SelectSingleNode("//label[@id='titulo1']//text()") as HtmlTextNode;
Hnode.Text = lbltitulo1.Text;