66

我想知道是否有可以在 C# 中使用的类似 jQuery 的 css 选择器。

目前,我正在使用正则表达式解析一些 html 字符串,并认为在 jQuery 中使用类似 css 选择器的东西来匹配我想要的元素会更好。

4

5 回答 5

80

2012 年 10 月 18 日更新

CsQuery现在是 1.3 版。最新版本包含了validator.nu HTML5 解析器的 C# 端口。因此,CsQuery 现在将生成一个使用 HTML5 规范进行无效标记处理并且完全符合标准的 DOM。

原始答案

老问题,但新答案。我最近发布了 CsQuery 1.1 版,这是一个用于 .NET 4 的 jQuery 端口,用 C# 编写,我已经研究了大约一年。同样在NuGet上作为“CsQuery”

当前版本实现了所有 CSS2 和 CSS3 选择器、所有 jQuery 扩展以及所有 jQuery DOM 操作方法。它具有广泛的测试覆盖率,包括来自 jQuery 和 sizzle(jQuery CSS 选择引擎)的所有测试。我还包含了一些与 Fizzler 直接比较的性能测试;在大多数情况下,CsQuery 的性能大大优于它。例外实际上是在 Fizzler 更快的地方加载 HTML;我认为这是因为 fizzler 没有建立索引。不过,在您第一次选择之后,您会得到那个时间。

github 站点上有文档,但在基本层面上,它的工作原理如下:

从 HTML 字符串创建

CQ dom = CQ.Create(htmlString);

从网络同步加载

CQ dom = CQ.CreateFromUrl("http://www.jquery.com");

异步加载(非阻塞)

CQ.CreateFromUrlAsync("http://www.jquery.com", responseSuccess => {
    Dom = response.Dom;        
}, responseFail => {
    ..
});

运行选择器并做 jQuery 的东西

var childSpans = dom["div > span"];
childSpans.AddClass("myclass");

CQ对象就像 jQuery 对象。上面使用的属性索引器是默认方法(如$(...).

输出:

string html = dom.Render();
于 2012-06-18T20:51:14.133 回答
72

您绝对应该看到@jamietre 的CsQuery。看看他对这个问题的回答!

FizzlerSharp-Query提供了类似的功能,但这些项目似乎被放弃了。

于 2009-11-19T14:53:37.567 回答
2

不太像 jQuery,但这可能会有所帮助: http: //www.codeplex.com/htmlagilitypack

于 2009-10-16T21:56:34.333 回答
1

对于 XML,您可以使用 XPath...

于 2009-10-16T21:53:32.077 回答
1

我不完全清楚您要实现的目标,但是如果您有一个要从中提取数据的 HTML 文档,我建议您使用parser加载它,然后它变得相当简单查询对象以提取所需的元素。

我在上面链接的解析器允许使用 XPath 查询,这听起来像您正在寻找的。

如果我误解了,请告诉我。

于 2009-10-16T21:54:21.203 回答