etree.findall: 'OR'查询?
我想在一个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
可以使用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>]