ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-使用HTML Agility Pack从HTML字符串中的“样式”属性中删除特定样式

2019-10-28 05:05:57  阅读:158  来源: 互联网

标签:html-agility-pack html-parsing c


我有一串HTML,其中包含各种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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有