使用HtmlAgilityPack删除属性

Ted*_*erg 20 html html-parsing html-agility-pack

我正在尝试style使用HtmlAgilityPack创建一个代码段来删除所有属性而不管标记.

这是我的代码:

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

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有坚持下去?如果我element立刻看了看对象Remove("style").我可以看到style属性已被删除,但它仍然出现在DocumentNode对象中.:/

我感觉有点傻,但它似乎对我来说?有人用HtmlAgilityPack做过这个吗?谢谢!

更新

我将我的代码更改为以下内容,并且它正常工作:

public static void RemoveStyleAttributes(this HtmlDocument html)
{
   var elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@style");

   if (elementsWithStyleAttribute!=null)
   {
      foreach (var element in elementsWithStyleAttribute)
      {
         element.Attributes["style"].Remove();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 8

您的代码段似乎是正确的 - 它会删除属性.问题是,DocumentNode .InnerHtml(我假设您监视此属性)是一个复杂的属性,也许它在一些未知的情况下得到更新,您实际上不应该使用此属性将文档作为字符串.而不是它的HtmlDocument.Save方法:

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}
Run Code Online (Sandbox Code Playgroud)

now result变量保存文档的字符串表示形式.

还有一件事:您的代码可以通过更改表达式来改进,"//*[@style]"只有元素才能获得style属性.


Ott*_*lis 7

这是一个非常简单的解决方案

VB.net

element.Attributes.Remove(element.Attributes("style"))
Run Code Online (Sandbox Code Playgroud)

C#

element.Attributes.Remove(element.Attributes["style"])
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,一个更正: element.Attributes("style") 应该是 element.Attributes["style"] (2认同)