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 - только для чтения. Как заменить тексты на другой текст и сохранить их в файл?
Ответы
Ответ 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"