Je souhaite remplacer le texte interne des balises HTML par un autre texte. J'utilise HtmlAgilityPack
J'utilise ce code pour extraire tous les textes
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 ?
}
Mais InnerText est en lecture seule. Comment puis-je remplacer des textes par un autre texte et les sauvegarder dans un fichier?
Essayez le code ci-dessous. Il sélectionne tous les nœuds sans enfant et filtre les nœuds de script. Peut-être avez-vous besoin d'ajouter un filtrage supplémentaire. En plus de votre expression XPath, celle-ci recherche également des noeuds feuille et filtre le contenu textuel des balises <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);
}
Étrange, mais j'ai constaté qu'InnerHtml n'est pas en lecture seule. Et quand j'ai essayé de le définir comme ça
aElement.InnerHtml = "sometext";
la valeur d' InnerText
également été remplacée par "sometext"