Замена HTML-тега InnerText с помощью HTML Agility Pack

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

Вопрос

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

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

Я хочу обновить текст внутри этого 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 - это поле только для чтения, хотя оно написано в документации, которую оно «получает или устанавливает». Есть ли альтернативный метод, с помощью которого это можно сделать?

Принятый ответ

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

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

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow