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)
您的代码段似乎是正确的 - 它会删除属性.问题是,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属性.
这是一个非常简单的解决方案
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)