有沒有辦法用HTMLAgilityPack用文本節點替換html節點?

c# dom html html-agility-pack

我想使用HTMLAgility包用文本節點替換文檔中的節點。這樣做的目的是刪除節點本身周圍的標籤。目前,我這樣做:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

有一個更好的方法嗎?如果我嘗試創建一個新的文本節點,然後執行類似下面的代碼片段,我收到一個無效的強制轉換錯誤:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

(在指出錯字後更新,但問題仍然存在)

我使用的方法錯了嗎?我應該使用另一種方​​法來執行這樣的功能嗎?謝謝。

熱門答案

這樣做的目的是刪除節點本身周圍的標籤

你的第二個代碼剪切執行完全標記刪除,除了一個拼寫錯誤(我猜):

HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);

此時應更換hNewNode.InnerHtml通過hChildNode.InnerHtml否則你的代碼甚至不會編譯(使用未分配的變量)。

另外要提一下,在創建文本節點之後,它將不會有替換的子節點(而不是這個節點替換節點時,它將具有相同的InnerHtml屬性值)。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因