2010-03-16 61 views
1

我想用lxml.etree.findall在XHTML文件中找到所有樣式表定義。這可能很簡單etree.findall:'OR'-lookup?

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

回答

2

可能使用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>] 
+0

好笑,我試圖以'tree.findall'表達,它沒有發生,我認爲'tree.xpath'可以工作。謝謝! – 2010-03-16 11:37:04

+0

不客氣!在我寫作時,我意識到你的'findall'表達式包含一個謂詞,我不知道它會接受。自從熟悉'xpath'後,我一直沒有回到'findall'。 – MattH 2010-03-16 11:43:53