将 CsQuery(我是它的主要作者)视为一种用于处理 HTML 的工具。
这是一个 .NET jQuery 端口,它为您提供通过在客户端上使用的相同方法(DOM 和 jQuery 的 API)对 HTML 的完全访问。这使得推出自己的消毒剂变得非常容易。
Rick Strahl最近发表了一篇关于清理 HTML的博客文章。他展示了如何使用 HTML Agility Pack 使用他的规则来做到这一点,我在那里发表了一条评论,展示了如何使用 CsQuery 更轻松地实现相同的目标。给定标签的枚举,基础就是这样BlackList
:
CQ doc = CQ.Create(html);
// creates a grouped selector "iframe,form,script, ..."
string selector = String.Join(",",BlackList);
// CsQuery uses the property indexer as a default method, it's identical
// to the "Select" method and functions like $(...)
doc[selector].Remove();
如果您不想实际删除某些标签中的内容,例如您希望禁止的格式化标签,您可以使用 jQuery 的 unwrap 代替。这将具有删除标签但保留其子标签的效果。
doc[selector].UnWrap();
完成后:
string cleanHtml = doc.Render();
Ricks 的帖子中有更多关于清理 javascript 事件属性等的内容,但基本上 CsQuery 是一个工具箱,具有熟悉且简单的 HTML 操作方式。创建一个按您想要的方式工作的消毒剂应该很容易。
CsQuery 的 DOM 模型还包含直接访问样式的方法(例如,以比仅操作字符串更方便的方式),如果您需要执行诸如删除某些命名样式之类的操作。例如,您可以从所有元素中删除“字体粗细”样式:
// use the [attribute] selector to target only elements with styles
foreach (IDomObject element in doc["[style]"]) {
if (element.HasStyle("font-weight")) {
element.RemoveStyle("font-weight");
}
}
目前 CsQuery 的主要缺点是文档。它的 API 旨在尽可能地匹配浏览器 DOM 和 jQuery(考虑到 jQuery 和 C# 之间的语言差异),并且公共 API 有很好的注释,所以一旦你开始使用它应该很容易编写代码。
但是有一些非标准方法(如“HasStyle”和“RemoveStyle”)是 CsQuery 独有的。不过,github 上的自述文件很好地涵盖了基本用法。它也在 Nuget 上作为CsQuery
.