2010-08-19 28 views
0

有沒有辦法從lxml的lxml.etree.iterparse中獲取多個標籤名稱?我有一個類似文件的對象,它具有昂貴的讀取操作和許多標記,因此獲取所有標記或執行兩次傳遞並不理想。lxml的iterparse中有多個標籤名稱?

編輯:這將是像美麗的湯的find(['tag-1', 'tag-2]),除了作爲iterparse的參數。想象一下,解析HTML頁面的<td><div>標籤。

+2

您可以加入一個例子嗎?我不確定你的意思是「多個標籤名稱」。你的意思是相當於做一個.find()與你正在尋找多種可能的選項? XML(或者只是由XML構成)的簡短部分的一個例子就是您希望獲得的內容是最優的。 – nearlymonolith 2010-08-19 18:17:04

回答

3

我不是100%肯定你的意思在這裏是「讓所有標籤」,但也許這是你在找什麼:

for event, elem in iterparse(file_like_object): 
    if elem.tag == 'td' or elem.tag == 'div': 
     # reached the end of an interesting tag 
     print 'found:', elem.tag 
     # possibly quit early to prevent further parsing 
     if exit_condition: break 

iterparse在分析過程中產生的飛行事件,所以你只需要讀取儘可能多的數據。但是,在解析過程中,您無法跳過閱讀元素,因爲您不知道要跳過多遠。在上面,我們只是忽略了我們不感興趣的標籤。

正如你可能已經知道的:不要使用xml解析器的html。 編輯 - 事實證明,lxml支持html解析,但您應該檢查文檔以查看程度。

+0

很好的例子,謝謝。您可以使用iterparse的標籤參數限制標籤,但我不認爲您可以放入多個標籤。 – Chris 2011-03-29 18:19:29

4

我知道我遲到了,但也許別人需要同一個問題的幫助。 此代碼將產生兩個Tag1事件和Tag2標籤:

etree.iterparse(io.BytesIO(xml), events=('end',), tag=('Tag1', 'Tag2'))