2010-03-16 2 views
1

Je veux trouver toutes les définitions de feuille de style dans un fichier XHTML avec lxml.etree.findall. Cela pourrait être aussi simple queetree.findall: Recherche 'OR'?

elems = tree.findall('link[@rel="stylesheet"]') + tree.findall('style') 

Mais le problème avec les définitions de style CSS est que l'ordre est important, par ex.

<link rel="stylesheet" type="text/css" href="/media/css/first.css" /> 
<style>body:{font-size: 10px;}</style> 
<link rel="stylesheet" type="text/css" href="/media/css/second.css" /> 

si le contenu de la balise style est appliquée après les règles dans les deux balises link, le résultat peut être complètement différent de celui où les règles sont appliquées dans l'ordre d'apparition. Alors, comment faire une recherche qui inclut à la fois link[@rel="stylesheet"] et style?

Répondre

2

possible en utilisant XPATH:

data = """<link rel="stylesheet" type="text/css" href="/media/css/first.css" /> 
<style>body:{font-size: 10px;}</style> 
<link rel="stylesheet" type="text/css" href="/media/css/second.css" /> 
""" 

from lxml import etree 

h = etree.HTML(data) 

h.xpath('//link[@rel="stylesheet"]|//style') 

[<Element link at 97a007c>, 
<Element style at 97a002c>, 
<Element link at 97a0054>] 
+0

drôle, j'ai essayé avec cette expression 'tree.findall', il n'y a pas eu pour moi que' tree.xpath' pourrait fonctionner. Merci! –

+0

De rien! Au moment où j'écrivais, je me suis rendu compte que votre expression 'findall' contenait un prédicat que je ne savais pas qu'elle accepterait. Je ne suis pas revenu à 'findall' depuis que je me suis familiarisé avec' xpath'. – MattH

Questions connexes