Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a jQuery-like CSS/HTML selector that can be used in C#?

I'm wondering if there's a jQuery-like css selector that can be used in C#.

Currently, I'm parsing some html strings using regex and thought it would be much nicer to have something like the css selector in jQuery to match my desired elements.

like image 617
Dave Avatar asked Oct 16 '09 21:10

Dave


People also ask

Are jQuery selectors the same as CSS selectors?

Yes, they are practically equal, jQuery could have some extra selectors documented in http://api.jquery.com/category/selectors but most important: you can use for e.g. $('#foo img') or $('. a, . b, #c') and in your css you can use :checked{...}

What are jQuery selectors?

jQuery selectors allow you to select and manipulate HTML element(s). jQuery selectors are used to "find" (or select) HTML elements based on their name, id, classes, types, attributes, values of attributes and much more. It's based on the existing CSS Selectors, and in addition, it has some own custom selectors.


1 Answers

Update 10/18/2012

CsQuery is now in release 1.3. The latest release incorporates a C# port of the validator.nu HTML5 parser. As a result CsQuery will now produce a DOM that uses the HTML5 spec for invalid markup handling and is completely standards compliant.

Original Answer

Old question but new answer. I've recently released version 1.1 of CsQuery, a jQuery port for .NET 4 written in C# that I've been working on for about a year. Also on NuGet as "CsQuery"

The current release implements all CSS2 & CSS3 selectors, all jQuery extensions, and all jQuery DOM manipulation methods. It's got extensive test coverage including all the tests from jQuery and sizzle (the jQuery CSS selection engine). I've also included some performance tests for direct comparisons with Fizzler; for the most part CsQuery dramatically outperforms it. The exception is actually loading the HTML in the first place where Fizzler is faster; I assume this is because fizzler doesn't build an index. You get that time back after your first selection, though.

There's documentation on the github site, but at a basic level it works like this:

Create from a string of HTML

CQ dom = CQ.Create(htmlString); 

Load synchronously from the web

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

Load asynchronously (non-blocking)

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

Run selectors & do jQuery stuff

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

the CQ object is like thejQuery object. The property indexer used above is the default method (like $(...).

Output:

string html = dom.Render(); 
like image 71
Jamie Treworgy Avatar answered Sep 22 '22 19:09

Jamie Treworgy