我想知道是否有类似于jQuery的CSS选择器可以在C#中使用。
目前,我正在使用正则表达式解析一些HTML字符串,并认为使用类似于jQuery中的CSS选择器来匹配我需要的元素会更好。
我想知道是否有类似于jQuery的CSS选择器可以在C#中使用。
目前,我正在使用正则表达式解析一些HTML字符串,并认为使用类似于jQuery中的CSS选择器来匹配我需要的元素会更好。
更新于2012年10月18日
CsQuery现在发布了1.3版本。最新版本包含validator.nu HTML5解析器的C#端口。因此,CsQuery现在将产生一个使用HTML5规范处理无效标记的DOM,并且完全符合标准。
原回答
虽然这是一道老问题,但我有了新答案。我最近发布了CsQuery 1.1版本,这是我用C#编写的适用于.NET 4的jQuery移植版,我已经花了大约一年的时间进行开发。同时,在NuGet上也提供了名为"CsQuery"的安装包。
当前版本实现了所有CSS2和CSS3选择器、所有jQuery扩展以及所有jQuery DOM操作方法。它有广泛的测试覆盖,包括所有来自jQuery和sizzle(jQuery CSS选择引擎)的测试。我还包括了一些性能测试,以便和Fizzler进行直接比较;在大多数情况下,CsQuery的性能远优于Fizzler。不过,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();
你肯定应该看一下 @jamietre 的 CsQuery。查看他对这个问题的回答!
Fizzler 和 Sharp-Query 提供类似的功能,但这些项目似乎已被放弃。
对于 XML,您可以使用 XPath...
我不是完全清楚你想要实现什么,但如果你有一个HTML文档,想从中提取数据,我建议使用解析器加载它,然后查询对象以提取所需元素就变得相当简单。
我上面提供的解析器允许使用XPath查询,这听起来像是你正在寻找的。
如果我误解了,请告诉我。