2009-04-23 7 views
5

Les gars, je dois développer un outil qui répondraient aux exigences en suivantes:analyseur CSS + générateur XHTML, les conseils nécessaires

  1. Entrée: Document XHTML avec des règles CSS au sein de la section head.
  2. Sortie: document XHTML avec des règles CSS calculées dans la balise attributs

La meilleure façon d'illustrer le comportement que je veux est la suivante.

entrée Exemple:

<!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> 

Exemple de sortie:

<!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> 

Quels outils/bibliothèques convient le mieux pour une telle tâche? Je ne sais pas si BeautifulSoup et cssutils sont capables de faire ça.

Python n'est pas une exigence. Toutes les recommandations seront très appréciées.

+1

Etes-vous sûr de vouloir faire cela? Je ne vois aucune raison pour laquelle cela serait utile ... – chills42

+0

Ma première question serait pourquoi? – roryf

+1

Je voulais vous épargner le fond de ceci :). En bref, il s'agit d'envoyer des courriels basés sur CSS. C'est donc un outil pour faciliter le développement de tels messages. Et non, il ne s'agit pas d'envoyer du spam. – ohnoes

Répondre

1

0

Dépend de la complexité de votre CSS. Si c'est une simple question d'éléments ("p {}", "a {}"), IDs/Classes (#test {}), alors probablement le plus facile d'utiliser des expressions régulières. Vous devez en trouver un pour trouver toutes les définitions de style, puis les analyser, puis utiliser des expressions plus régulières pour trouver les occurrences de balises qui correspondent.

Pour, par exemple, si vous avez trouvé que vous aviez un style pour un balises, vous pouvez utiliser une expression régulière comme:

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

Pour les obtenir, alors vous auriez à faire remplacer pour ajouter le style. Bien sûr, vous voudriez que la regex accepte la balise en paramètre (la balise A dans ce cas).

Si vous participiez à la sélection d'un enfant ou si ce n'était pas seulement des éléments racine et des ID/classes, cela risquait d'être désordonné.

Envisagez simplement de définir les styles en ligne pour commencer?

1

Bien que je ne connais aucun outil spécifique pour ce faire, est l'approche de base ici, je prendrais:

Charger en tant que document xml
Extraire les classes et styles css du document
Pour chaque paire de classe css et le style
    Construct requête XPath de la classe css
    Pour chaque noeud correspondant
        Définissez l'attribut de style pour cette classe
noeud Supprimer le style du document Conversion des documents à la chaîne

Questions connexes