Changer de balise InnerText avec HTML AGILITY PACK

c# html html-agility-pack

Question

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:

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);

}

Réponse acceptée

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.InnerText.Replace("test", lbltitulo1.Text);

Réponse populaire

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;



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi