c#-使用HTML Agility Pack从HTML字符串中的“样式”属性中删除特定样式
作者:互联网
<span style="display:block;position:fixed;width:100%;height:2000px;background-color:rgba(0,0,0,0);z-index:9999!important;top:0;left:0;cursor:default;"></span>
这看起来很奇怪,但是我只想删除style属性中的特定项(对于所有HTML元素).例如我要删除
位置:固定且z-index:9999!重要;和top:0;左:0;
仅举几例,但保留其他所有内容.现在的问题是,它不一定是position:fixed;可能是位置:绝对;管他呢.就像可能是z-index:9998;或最高:20;等等…
我需要能够通过其键删除样式元素,所以位置:*任何*和顶部:*任何*等…并且还必须以不区分大小写的方式执行此操作.因此它将得到POSITION:* anything *或PoSition:* anything *
有没有办法使用HTML Agility Pack来实现这一目标?
解决方法:
HTML Agility Pack中似乎没有对内联样式字符串解析的任何支持,但是.NET在System.Web.UI中确实对此提供了一些功能来支持WebForms控件.
它称为CssStyleCollection,它将样式字符串转换为字符串键/值对的漂亮数组,并允许您删除不需要的特定键.
但是,由于它是供WebControl使用的内部工具,因此它没有公共构造函数.相反,您必须通过反射来实例化它,或使用类似的技巧.
CssStyleCollection style = new Panel().Style;
创建完成后,
style.Value = "YOUR STYLE STRING";
然后删除不需要的项目;
style.Remove("position");
style.Remove("z-index");
style.Remove("top");
style.Remove("left");
从style.Value中检索新的带分隔符的样式字符串.
重要提示:我还没有测试过,但是过程似乎很简单,即使有点怪异.我可能还没有遇到一些惊喜.特别是,我不知道它如何处理同一字符串中有多个重复样式设置的情况.
top:0;margin-left:20;top:10;
在内联样式字符串中,浏览器将遵循最后指定的值,因此top:10获胜.但是,由于CssStyleCollection使用唯一键,因此它既不能存储最高值,也很可能丢弃一个.
标签:html-agility-pack,html-parsing,c 来源: https://codeday.me/bug/20191028/1950029.html