etree.findall: «ИЛИ» - поиск? - PullRequest
1 голос
/ 16 марта 2010

Я хочу найти все определения таблицы стилей в файле XHTML с lxml.etree.findall. Это может быть так просто, как

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

Но проблема с определениями стиля CSS заключается в том, что порядок имеет значение, например,

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

если содержимое тега style применяется после правил в двух тегах link, результат может полностью отличаться от того, к которому применяются правила в порядке определения.

Итак, как бы я сделал поиск, который включает в себя link[@rel="stylesheet"] и style?

1 Ответ

3 голосов
/ 16 марта 2010

Возможно использование 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>]
...