web-dev-qa-db-fra.com

Existe-t-il un sélecteur CSS / HTML de type jQuery qui peut être utilisé en C #?

Je me demande s'il y a un sélecteur css de type jQuery qui peut être utilisé en C #.

Actuellement, j'analyse certaines chaînes html à l'aide d'expressions rationnelles et je pense qu'il serait beaucoup plus agréable d'avoir quelque chose comme le sélecteur css dans jQuery pour correspondre à mes éléments souhaités.

63
Dave

Vous devriez certainement voir @ jamietre's CsQuery . Découvrez sa réponse à cette question!

Fizzler et Sharp-Query fournissent des fonctionnalités similaires, mais les projets semblent abandonnés.

69
Andy S

Mise à jour 18/10/2012

CsQuery est maintenant dans la version 1.3. La dernière version intègre un port C # de l'analyseur validator.n HTML5. Par conséquent, CsQuery produira désormais un DOM qui utilise la spécification HTML5 pour la gestion des balises non valides et est entièrement conforme aux normes.

Réponse originale

Ancienne question mais nouvelle réponse. J'ai récemment publié la version 1.1 de CsQuery, un port jQuery pour .NET 4 écrit en C # sur lequel je travaille depuis environ un an. Également sur NuGet comme "CsQuery"

La version actuelle implémente tous les sélecteurs CSS2 et CSS3, toutes les extensions jQuery et toutes les méthodes de manipulation DOM jQuery. Il a une couverture de test étendue, y compris tous les tests de jQuery et sizzle (le moteur de sélection CSS jQuery). J'ai également inclus des tests de performances pour des comparaisons directes avec Fizzler; pour la plupart, CsQuery le surpasse considérablement. L'exception est en fait le chargement du HTML en premier lieu où Fizzler est plus rapide; Je suppose que c'est parce que fizzler ne construit pas d'index. Cependant, vous obtenez ce temps après votre première sélection.

Il y a de la documentation sur le site github, mais au niveau de base, cela fonctionne comme ceci:

Créer à partir d'une chaîne de HTML

CQ dom = CQ.Create(htmlString);

Charger de manière synchrone à partir du Web

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

Chargement asynchrone (non bloquant)

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

Exécuter des sélecteurs et faire des choses jQuery

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

l'objet CQ est comme l'objet jQuery. L'indexeur de propriétés utilisé ci-dessus est la méthode par défaut (comme $(...).

Production:

string html = dom.Render();
78
Jamie Treworgy

Pour XML, vous pouvez utiliser XPath ...

1
Frank Schwieterman

Je ne sais pas exactement ce que vous essayez de réaliser, mais si vous avez un document HTML dont vous essayez d'extraire des données, je vous recommande de le charger avec un analyseur , puis il devient assez trivial d'interroger l'objet pour extraire les éléments souhaités.

L'analyseur que j'ai lié ci-dessus permet d'utiliser des requêtes XPath, ce qui ressemble à ce que vous recherchez.

Faites-moi savoir si j'ai mal compris.

1
patjbs

Pas tout à fait comme jQuery, mais cela peut aider: http://www.codeplex.com/htmlagilitypack

1
Daniel