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不是只讀的。當我試圖這樣設置時

aElement.InnerHtml = "sometext";

InnerText的值也改為"sometext"




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因