Я использую HTMLAgility Pack для внесения некоторых изменений в вывод HTML-кода - нахождение всех текстовых узлов и их замена:
const string xpath = "//*[not(self::script or self::style)]/text()[normalize-space(.) != '']";
var docNodes = doc.DocumentNode.SelectNodes(xpath).ToList();
foreach (var htmlNode in nodes)
{
var parent = htmlNode.ParentNode;
var newNode = new HtmlNode(HtmlNodeType.Text, doc, 0){InnerHTML = "Test"};
parent.ReplaceChild(newNode, htmlNode);
}
Но это, кажется, вызывает проблему, если текстовый узел не является единственным потомком родителя. Например:
<label>Email:<br><input name="txtID" type="text" id="txtID" class="input"></label>
После замены доступ к doc.DocumentNode.OuterHTML приводит к следующему исключению:
Невозможно привести объект типа 'HtmlAgilityPack.HtmlNode' к типу 'HtmlAgilityPack.HtmlTextNode'.
Я делаю замену неправильно? Я не могу пойти и "очистить" все исходные документы HTML, которые могут пройти через это.