我想知道是否有类似jQuery的css选择器可以在C#中使用。
目前,我正在使用正则表达式解析一些html字符串,并认为在jQuery中使用css选择器以匹配我想要的元素会更好。
答案 0 :(得分:78)
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更快的地方加载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();
答案 1 :(得分:69)
你一定要看@ jamietre的CsQuery。看看他对这个问题的回答!
Fizzler和Sharp-Query提供类似功能,但项目似乎已被放弃。
答案 2 :(得分:2)
对于XML,您可以使用XPath ...
答案 3 :(得分:1)
我不清楚你要实现的目标,但是如果你有一个HTML文档,你试图从中提取数据,我建议加载parser,然后,查询对象以获取所需元素变得相当简单。
我上面链接的解析器允许使用XPath查询,这听起来像你正在寻找的。 p>
如果我误解了,请告诉我。
答案 4 :(得分:1)
不太像jQuery,但这可能会有所帮助: http://www.codeplex.com/htmlagilitypack