Замена тега HTML div InnerText с помощью HTML Agility Pack - PullRequest
6 голосов
/ 01 февраля 2012

Я использую HTML Agility Pack для манипулирования и редактирования HTML-документа. Я хочу изменить текст в поле, например:

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

Я хочу обновить текст в этом элементе:

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

Я пытался сделать это, используя следующий код, но, похоже, он не работает, потому что свойство InnerText доступно только для чтения.

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

Что я здесь не так делаю? Как упоминалось выше, InnerText является полем только для чтения, хотя в документации написано, что он «получает или устанавливает». Есть ли альтернативный метод, с помощью которого это можно сделать?

1 Ответ

9 голосов
/ 01 февраля 2012

Здесь используется выражение: //div[@id='Div1'] выбирает div, который не является HtmlTextNode, поэтому в вашем примере переменная hNode содержит null.

Свойство InnerText действительно доступно только для чтения, но HtmlTextNode имеет свойство Text, которое можно использовать для установки необходимого значения. Но перед этим вы должны получить этот текстовый узел. Это можно легко сделать с помощью этого выражения: //div[@id='Div1']//b//text():

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