etree.findall: ‚OR'-Lookup?
-
20-09-2019 - |
Frage
Ich möchte alle Sheet-Definitionen in einer XHTML-Datei mit lxml.etree.findall
zu finden. Dies könnte so einfach sein wie
elems = tree.findall('link[@rel="stylesheet"]') + tree.findall('style')
Aber das Problem mit CSS-Stildefinitionen ist, dass die Reihenfolge wichtig, z.
<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" />
, wenn der Inhalt des style
Tages nach den Regeln in den beiden link
Tags angewandt wird, kann das Ergebnis von den einer ganz anders sein, wo die Regeln angewandt werden, um der Definition.
Also, wie würde ich tun, eine Lookup, dass sowohl inlcudes link[@rel="stylesheet"]
und style
?
Lösung
Mögliche Verwendung von 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>]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow