HtmlAgilityPack set node InnerText

c# html-agility-pack html-parsing parsing

Question

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?

Réponse acceptée

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);
}

Réponse populaire

É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"




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi