我使用HTMLAgility包做HTML輸出一些對即時修改 - 查找所有文本節點並替換它們:HTMLAgility包:在「混合型」更換內容節點
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);
}
但是,如果textnode不是父級的唯一孩子,這似乎會導致問題。例如:
<label>Email:<br><input name="txtID" type="text" id="txtID" class="input"></label>
被置換後,訪問doc.DocumentNode.OuterHTML導致以下例外: 無法轉換類型「HtmlAgilityPack.HtmlNode」的目的爲類型「HtmlAgilityPack.HtmlTextNode」。
我正在更換不正確嗎?我不能真正去「清理」可能貫穿這個東西的所有原始HTML文檔。