Установленный узел HtmlAgilityPack InnerText

c# html-agility-pack html-parsing parsing

Вопрос

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

Принятый ответ

Попробуйте код ниже. Он выбирает все узлы без детей и отфильтровывает узлы сценария. Возможно, вам нужно добавить дополнительную фильтрацию. В дополнение к вашему выражению 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);
}

Популярные ответы

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

aElement.InnerHtml = "sometext";

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow