HtmlAgilityPack imposta il nodo InnerText

c# html-agility-pack html-parsing parsing

Domanda

Voglio sostituire il testo interno dei tag HTML con un altro testo. Sto usando HtmlAgilityPack
Io uso questo codice per estrarre tutti i testi

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 ?
}

Ma InnerText è in sola lettura. Come posso sostituire i testi con un altro testo e salvarli in un file?

Risposta accettata

Prova il codice qui sotto. Seleziona tutti i nodi senza figli e i nodi di script filtrati. Forse hai bisogno di aggiungere qualche filtro aggiuntivo. Oltre alla tua espressione XPath, questo cerca anche i nodi foglia e filtra il contenuto di testo dei tag <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);
}

Risposta popolare

Strano, ma ho scoperto che InnerHtml non è di sola lettura. E quando ho provato a impostarlo in quel modo

aElement.InnerHtml = "sometext";

il valore di InnerText cambia anche in "sometext"




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché