Ersetzen eines HTML div InnerText-Tags mithilfe von HTML Agility Pack

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

Frage

Ich verwende das HTML Agility Pack, um ein HTML-Dokument zu bearbeiten und zu bearbeiten. Ich möchte den Text in dem Feld wie folgt ändern:

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

Ich möchte den Text in diesem div folgendermaßen aktualisieren:

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

Ich habe versucht, dies mit dem folgenden Code zu tun, aber es scheint nicht zu funktionieren, weil die InnerText-Eigenschaft schreibgeschützt ist.

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

Was mache ich hier falsch? Wie oben erwähnt, ist der InnerText ein schreibgeschütztes Feld, obwohl es in der Dokumentation geschrieben ist, die es "bekommt oder setzt". Gibt es eine alternative Methode, um dies zu erreichen?

Akzeptierte Antwort

Der Ausdruck wird hier verwendet: //div[@id='Div1'] wählt das div , das kein HtmlTextNode , so dass die Variable hNode in Ihrem Beispiel null .

Die InnerText Eigenschaft ist wirklich schreibgeschützt, aber HtmlTextNode hat die Eigenschaft Text , mit der der erforderliche Wert festgelegt werden kann. Aber vorher sollten Sie diesen Textknoten bekommen. Dies könnte leicht mit diesem Ausdruck geschehen: //div[@id='Div1']//b//text() :

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum