Изменить тег InnerText с пакетом HTML AGILITY - PullRequest
2 голосов
/ 16 февраля 2012

Я использую HTML Agility Pack, и я пытаюсь заменить InnerText некоторых тегов, подобных этому

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

}

html:

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

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Строки являются неизменяемыми (вы должны быть в состоянии найти много документации по этому вопросу).
Методы класса String не изменяют экземпляр, а создают новую измененную строку.

Таким образом, ваш звонок на:

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

не изменяет InnerText, но возвращает строку, которой вы хотите, чтобы InnerText был.

Кроме того, InnerText доступен только для чтения; вам придется использовать текст, как показано в Установить InnerText с HtmlAgilityPack

Вместо этого попробуйте следующую строку (снова присвойте свойству результат строковой операции):

titulo.Text = titulo.Text.Replace("test", lbltitulo1.Text);
1 голос
/ 17 февраля 2012

Я смог получить такой результат:

HtmlTextNode Hnode = null;
Hnode = DocHtml.DocumentNode.SelectSingleNode("//label[@id='titulo1']//text()") as HtmlTextNode;
Hnode.Text = lbltitulo1.Text;
...