web-dev-qa-db-ja.com

HtmlAgilityPackセットノード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は読み取り専用です。テキストを別のテキストに置き換えてファイルに保存するにはどうすればよいですか?

27
Shahin

以下のコードを試してください。子のないすべてのノードを選択し、スクリプトノードを除外します。たぶん、いくつかの追加のフィルタリングを追加する必要があります。 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);
}
20

奇妙ですが、InnerHtmlは読み取り専用ではないことがわかりました。そして、私がそれをそのように設定しようとしたとき

aElement.InnerHtml = "sometext";

InnerTextの値も"sometext"に変更されました

15
lena