Подтвердить что ты не робот

HtmlAgilityPack установить node InnerText

Я хочу заменить внутренний текст HTML-тегов на другой текст. Я использую HtmlAgilityPack
Я использую этот код для извлечения всех текстов

HtmlDocument doc = new HtmlDocument();
doc.Load("some path")

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']")) {
    // How to replace node.InnerText with some text ?
}

Но InnerText - только для чтения. Как заменить тексты на другой текст и сохранить их в файл?

4b9b3361

Ответ 1

Попробуйте использовать код ниже. Он выбирает все узлы без детей и отфильтровывает узлы script. Возможно, вам нужно добавить дополнительную фильтрацию. В дополнение к вашему выражению XPath это также ищет листовые узлы и отфильтровывает текстовое содержимое тегов <script>.

var nodes = doc.DocumentNode.SelectNodes("//body//text()[(normalize-space(.) != '') and not(parent::script) and not(*)]");
foreach (HtmlNode htmlNode in nodes)
{
    htmlNode.ParentNode.ReplaceChild(HtmlTextNode.CreateNode(htmlNode.InnerText + "_translated"), htmlNode);
}

Ответ 2

Странно, но я обнаружил, что InnerHtml не является readonly. И когда я попытался установить его таким образом

aElement.InnerHtml = "sometext";

значение InnerText также изменилось на "sometext"