2009-04-23 7 views
5

chicos, necesitan desarrollar una herramienta que satisfaga los requisitos siguientes:CSS + analizador generador de XHTML, el asesoramiento necesario

  1. de entrada: documento XHTML con reglas CSS dentro head sección.
  2. Salida: documento XHTML con reglas CSS computados en la etiqueta de los atributos

La mejor manera de ilustrar el comportamiento que quiero es el siguiente. de entrada

Ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <style type="text/css" media="screen"> 
    .a { color: red; } 
     p { font-size: 12px; } 
    </style> 
</head> 
<body> 
    <p class="a">Lorem Ipsum</p> 
    <div class="a"> 
     <p>Oh hai</p> 
    </div> 
</body> 
</html> 

Ejemplo de salida:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<body> 
    <p style="color: red; font-size: 12px;">Lorem Ipsum</p> 
    <div style="color: red;"> 
     <p style="font-size: 12px;">Oh hai</p> 
    </div> 
</body> 
</html> 

Qué herramientas/bibliotecas se ajuste mejor para tal tarea? No estoy seguro de si BeautifulSoup y cssutils son capaces de hacer esto.

Python no es un requisito. Cualquier recomendación será muy apreciada.

+1

¿Estás seguro de que quieres hacer eso? No veo ninguna razón por la que sea útil ... – chills42

+0

Mi primera pregunta sería ¿por qué? – roryf

+1

Quería perdonarte el fondo de esto :). En resumen, se trata de enviar correos electrónicos basados ​​en CSS. Por lo tanto, es una herramienta para facilitar el desarrollo de dichos mensajes. Y no, no se trata de enviar spam. – ohnoes

Respuesta

0

Depende de qué tan complicado va a ser su CSS. Si se trata simplemente de elementos ("p {}", "a {}"), IDs/Clases (#test {}), entonces probablemente sea más fácil usar expresiones regulares. Tendría que tener uno para encontrar todas las definiciones de estilo y luego analizarlas, luego use expresiones más regulares para encontrar instancias de etiquetas que coincidan.

Para, por ejemplo, si usted encontró que tenía un estilo para un tag, se podría utilizar una expresión regular como:

<a\b[^>]*>(.*?)</a> 

Para conseguirlos, entonces usted tendría que hacer un reemplazo para agregar el estilo. Por supuesto, querrá que la expresión regular acepte la etiqueta como parámetro (la etiqueta A en este caso).

Si entra en la selección de niños o algo más que simplemente elementos raíz y ID/clases, esto podría volverse demasiado rápido.

¿Considera la posibilidad de definir los estilos en línea para empezar?

1

Aunque no conozco ninguna herramienta específica para ello, aquí es el enfoque básico Me gustaría tener:

Cargar como documento XML
Extraiga las clases y estilos de CSS del documento
Para cada par de clase CSS y estilo
    Constructo consulta XPath de la clase css
    Para cada nodo coincidente
        Establecer el atributo de estilo para esa clase
nodo de estilo Quitar del documento documento Convert en la cadena

Cuestiones relacionadas