2009-10-16 18 views
62

Me pregunto si hay un selector css jQuery que se pueda usar en C#.¿Hay un selector de CSS/HTML similar a jQuery que pueda usarse en C#?

Actualmente, estoy analizando algunas cadenas html utilizando expresiones regulares y pensé que sería mucho mejor tener algo así como el selector css en jQuery para que coincida con mis elementos deseados.

+0

lo tanto, creo que hay actualmente nada como esto – Dave

+0

¿Cómo XPath no consultar a satisfacer sus necesidades de cadena de carga en objeto DOM con? Analizador XML o HTML, y consulta de elementos en función de lo que desee. Al igual que jQuery. – patjbs

+0

Si desea una estructura de consulta más fácil de grep, ¿ha intentado utilizar consultas de linq? – patjbs

Respuesta

69

Definitivamente usted debería ver @ de CsQuery jamietre. ¡Mira su respuesta a esta pregunta!

Fizzler y Sharp-Query proporcionan una funcionalidad similar, pero los proyectos parecen estar abandonados.

+0

Juste una nota: consulta aguda es GPL. Fizzler es LGPL, más amigable con los negocios. – nakhli

+0

Parece que Fizzler es beta durante 2 años, sin actividad. Sharp-Query no mucho mejor, estado confuso. –

+5

Considere la posibilidad de votar la respuesta de @ jamietre en lugar de la mía. ¡Él tiene una solución fantástica! –

2

Para XML puede utilizar XPath ...

+0

Sí, olvidé mencionar eso. Quería algo como el selector css por su simplicidad y claridad. – Dave

+3

Consulte HTML Agility Pack si desea usar XPath con potencialmente no-well HTML formado. http://htmlagilitypack.codeplex.com/ –

+0

Más tarde comencé a usar CsQuery y ahora lo prefiero. –

1

No estoy del todo claro en cuanto a lo que estamos tratando de lograr, pero si tiene un documento HTML que usted está tratando de extraer datos de, Recomiendo cargarlo con un parser, y luego se vuelve bastante trivial consultar el objeto para extraer los elementos deseados.

El analizador vinculado anteriormente permite el uso de consultas XPath, que suena como lo que está buscando.

Avísame si he entendido mal.

+0

¿Puedo saber a qué analizador se refiere? Solo quiero algo como Doc.select ("div.foo") para devolver todos los elementos que es un div y tengo clase foo. – Dave

+0

Agregué un enlace al texto, que apunta a una pregunta sobre SO sobre el análisis de HTML. En particular, el analizador de paquetes HTML Agility que he usado en el pasado para cargar documentos HTML y consultarlos con gran éxito. – patjbs

1

No del todo como jQuery, pero esto puede ayudar: http://www.codeplex.com/htmlagilitypack

+1

sí ... Acabo de revisar el paquete de agilidad html hace unos días. Pero, todavía usa XPath para hacer coincidir. No es que no me guste XPath. Pero, la limpieza de la sintaxis del selector CSS es mucho mejor. – Dave

+0

LINQ-to-Objects es probablemente lo que usaría. Pero a la derecha, no tan limpio como los selectores. – Daniel

78

actualización 10/18/2012

CsQuery se encuentra ahora en la versión 1.3. La última versión incorpora un puerto C# del analizador HTML5 validator.nu. Como resultado, CsQuery ahora producirá un DOM que usa la especificación HTML5 para el manejo de marcado no válido y cumple completamente con los estándares.

respuesta original

pregunta Viejo pero nueva respuesta. Recientemente he lanzado la versión 1.1 de CsQuery, un puerto jQuery para .NET 4 escrito en C# en el que he estado trabajando durante aproximadamente un año. También en NuGet como "CsQuery"

La versión actual implementa todos los selectores de CSS3 de CSS2 &, todas las extensiones de jQuery y todos los métodos de manipulación DOM de jQuery. Tiene una extensa cobertura de prueba que incluye todas las pruebas de jQuery y sizzle (el motor de selección jQuery CSS). También incluí algunas pruebas de rendimiento para realizar comparaciones directas con Fizzler; en su mayor parte CsQuery lo supera dramáticamente. La excepción es cargar el HTML en primer lugar, donde Fizzler es más rápido; Supongo que esto es porque Fizzler no crea un índice. Sin embargo, recuperas ese tiempo después de tu primera selección.

Hay documentación en el sitio GitHub, pero a un nivel básico funciona así:

Crear a partir de una cadena de HTML

CQ dom = CQ.Create(htmlString); 

carga de forma sincronizada desde la web

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

Cargar de forma asíncrona (sin bloqueo)

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

selectores Run & hacen jQuery cosas

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

el objeto CQ es como objeto thejQuery. El indexador bienes utilizados anteriormente es el método por defecto (como $(...)

de salida:.

string html = dom.Render(); 
+0

¿Se ocupa de casos en los que hay nuevas líneas, saltos de línea y pestañas como espacios en blanco que separan los nombres de las clases? – casperOne

+0

Acaba de agregar una prueba para esto, ya interpreta correctamente cualquier espacio en blanco en las clases como un separador. Entonces la respuesta es sí. –

+0

Gracias por la información. Desafortunadamente, la pregunta es NC, pero me he encontrado varias veces con este problema específico. – casperOne

Cuestiones relacionadas