使用HtmlAgilityPack刪除屬性

html html-agility-pack html-parsing

我正在嘗試使用HtmlAgilityPack創建一個代碼片段來刪除所有style屬性而不管標記。

這是我的代碼:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

但是,我不是要堅持下去?如果我在Remove("style")後立即查看element對象。我可以看到style屬性已被刪除 ,但它仍然出現在DocumentNode像中。 :/

我感覺有點愚蠢,但似乎對我來說?有人用HtmlAgilityPack做過這個嗎?謝謝!

更新

我將我的代碼更改為以下內容,並且它正常工作:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

一般承認的答案

您的代碼段似乎是正確的 - 它會刪除屬性。問題是, DocumentNode .InnerHtml (我假設你監視了這個屬性)是一個複雜的屬性,也許它在一些未知的情況下得到更新,你實際上不應該使用這個屬性將文檔作為字符串。而不是它的HtmlDocument.Save方法:

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}

now result變量保存文檔的字符串表示形式。

還有一件事:可以通過將表達式更改為"//*[@style]"來改進代碼,這樣只會獲得具有style屬性的元素。


熱門答案

這是一個非常簡單的解決方案

VB.net

element.Attributes.Remove(element.Attributes("style"))

C#

element.Attributes.Remove(element.Attributes("style"))



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