Domanda

Voglio trovare tutte le definizioni fogli di stile in un file XHTML con lxml.etree.findall. Questo potrebbe essere semplice come

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

Ma il problema con le definizioni di stile CSS è che le questioni di ordine, per esempio.

<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" />

se il contenuto del tag style viene applicato dopo la regole nei due tag link, il risultato può essere completamente diverso da quello in cui le regole vengono applicate in ordine di definizione.

Quindi, come vorrei fare una ricerca che sia inlcudes link[@rel="stylesheet"] e style?

È stato utile?

Soluzione

possibile utilizzando 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>]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top