etree.findall: 'OR'-lookup?
-
20-09-2019 - |
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
?
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