HtmlAgilityPack установить узел InnerText - PullRequest
27 голосов
/ 26 ноября 2011

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

Ответы [ 2 ]

20 голосов
/ 26 ноября 2011

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

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

aElement.InnerHtml = "sometext";

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

...