Remplacement d'une balise HTML div InnerText à l'aide de HTML Agility Pack

asp.net c# html-agility-pack html-parsing

Question

J'utilise HTML Agility Pack pour manipuler et éditer un document HTML. Je veux changer le texte dans le champ comme ceci:

<div id="Div1"><b>Some text here.</b><br></div>

Je cherche à mettre à jour le texte dans cette div pour être:

<div id="Div1"><b>Some other text.</b><br></div>

J'ai essayé de le faire en utilisant le code suivant, mais cela ne semble pas fonctionner car la propriété InnerText est en lecture seule.

HtmlTextNode hNode = null;
hNode = hDoc.DocumentNode.SelectSingleNode("//div[@id='Div1']") as HtmlTextNode;
hNode.InnerText = "Some other text.";
hDoc.Save("C:\FileName.html");

Qu'est-ce que je fais mal ici? Comme mentionné ci-dessus, InnerText est un champ en lecture seule, bien qu'il soit écrit dans la documentation qu'il "obtient ou définit". Y a-t-il une autre méthode par laquelle cela peut être fait?

Réponse acceptée

L'expression est utilisée ici: //div[@id='Div1'] sélectionne le div , qui n'est pas un HtmlTextNode . hNode variable hNode est donc null dans votre exemple.

La propriété InnerText est vraiment en lecture seule, mais HtmlTextNode a la propriété Text qui peut être utilisée pour définir la valeur nécessaire. Mais avant cela, vous devriez obtenir ce noeud de texte. Cela pourrait être facilement fait avec cette expression: //div[@id='Div1']//b//text() :

hNode = hDoc.DocumentNode
    .SelectSingleNode("//div[@id='Div1']//b//text()") as HtmlTextNode;
hNode.Text = "Some other text.";


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow