2008-10-10 27 views
5

Estoy creando una herramienta que comprobará el XHTML generado dinámicamente y lo validará contra los contenidos esperados.selectores css del lado del servidor

Necesito confirmar que la estructura es correcta y que existen atributos específicos/coincidencia. Puede haber otros atributos que no me interesan, por lo que una comparación directa de cadenas no es adecuada.

Una forma de validar esto es con XPath, y ya lo he implementado, pero también me gustaría algo menos detallado: quiero poder usar selectores de CSS, como puedo con jQuery, pero en el servidor - dentro del código CFML - a diferencia de en el cliente.

¿Existe una biblioteca CFML o Java que me permita usar selectores CSS contra una cadena XHTML?

Respuesta

7

Acabo de lanzar un proyecto de código abierto que es una implementación de W3C CSS Selectors Level 3 en Java. Por favor inténtalo. Estaba buscando lo mismo y decidí implementar mi propio motor. Está inspirado en el código de WebKit, etc.

http://github.com/chrsan/css-selectors/tree

+0

Gracias Christer. Aún no he tenido la oportunidad de volver al proyecto para el que necesitaba esto, pero parece exactamente lo que quiero. Esta semana echaré un vistazo a algún punto y le daré los comentarios que pueda tener. –

+0

¡Esto se ve muy bien! Podría considerar la integración de tu biblioteca en [jOOX] (http://code.google.com/p/joox/) –

2

No conozco una biblioteca Java en sí, pero hay una biblioteca Ruby llamada Hpricot que hace exactamente lo que está buscando. Junto con la implementación de Ruby en la plataforma Java, JRuby, debería ser relativamente sencillo llamar a los métodos Ruby desde su código Java (utilizando BSF, JSR-222 Scripting APIs o an internal API).

¿Está utilizando Coldfusion 8? Coldfusion 8, que se basa en Java 6, admite las API de scripts JSR-222 "javax.scripting".

Eche un vistazo a this blog entry on embedding PHP within CFML. Debería poder hacer lo mismo con con Ruby. Hay un código de ejemplo de archivo ZIP vinculado desde esta publicación del blog, y si abre la CFML, verá un buen ejemplo de incorporación de Ruby dentro de CFML.

Aunque podría tomar un poco de trabajo hacer que todas las piezas funcionen juntas, pero con un poco de inversión, debería darle la consulta robusta de análisis/CSS que usted está buscando.

0

Existe una diferencia teórica entre el servidor y el cliente. Para un navegador web, el documento es una jerarquía DOM viviente. Para su código de servidor es simplemente un documento XML de cualquier tipo. XPath es la forma "correcta" de acceder a los elementos de un documento XML.

De modo que, a menos que tenga un problema grave de rendimiento con su solución XPath actual, o en realidad no funcione correctamente, le sugiero que se quede con ella. Intentar algo demasiado inteligente conlleva el riesgo de romper algo que funciona.

Si encuentra que el XPath para ser demasiado prolijo y feo dejar sentados alrededor, o quiere más poder volver a utilizar la herramienta en diferentes casos, o simplemente puede no resisten a tratar de hacer algo inteligente, entonces podría intentar escribir una utilidad que compila un selector CSS dado en un XPath. A continuación, puede llamar a esto en una línea cada vez que lo necesite.

+0

xml! = Html. no se puede analizar de manera confiable html con xpath – Shawn

+0

XHTML, si es válido, es un subconjunto de XML. La pregunta claramente decía que era XHTML lo que generaban. –

+0

@Shawn Analizo HTML con XPath todo el tiempo, usando librerías que crean un DOM. ¿Puede proporcionar un ejemplo de HTML válido que no se puede analizar? –

2

Hpricot es definitivamente una solución fantástica si la ruta JRuby está abierta para usted.

Wrt. XPath es la forma "correcta" de acceder a documentos XML ... lo siento, pero esto es basura. Existen numerosas formas de acceder a los elementos de un documento XML: cruce DOM, XPath, XQuery, selectores CSS, por nombrar algunos. XPath es ciertamente popular, pero los selectores de CSS son muy potentes, suponiendo que su documento XML tenga semántica en HTML.

+0

problema es que hpricot se basa en un analizador nativo, no estoy seguro de lo fácil que sería ejecutarlo en jRuby. –

+0

Hpricot funciona bien dentro de JRuby ya que los autores han creado una implementación Java del analizador nativo. – Ijonas

2

Si puede utilizar PHP dentro de su CFML (como se mencionó anteriormente), usted podría tomar ventaja de esta biblioteca excelente "jQuery para PHP", phpQuery

CSS completo las funciones de apoyo selector, manipulación, atravesar, etc. Debe funcionar muy bien para lo que necesita.

Espero que ayude.

0

puede ser más fácil de usar cQuery.com - cQuery.com es un 'Content Query Engine' basado en API para extraer contenido de sitios web en vivo mediante CSS.

Puede usarlo programáticamente en su aplicación.

Cuestiones relacionadas