2010-05-25 123 views
3

我將處理項目的XML文件。我以前決定使用lxml,但在閱讀要求後,我認爲ElemenTree會更適合我的目的。我應該使用哪個Python XML庫?

有要處理的XML文件是:

  1. 體積小。通常< 10 KB。

  2. 沒有名稱空間。

  3. 簡單的XML結構。

由於XML尺寸較小,內存不是問題。我唯一關心的是快速解析。

我該怎麼辦?大多數情況下,我看到人們推薦lxml,但考慮到我的解析要求,我真的願意從中受益嗎?或者ElementTree會更好地服務我的目的?

回答

2

正如其他人所指出的那樣,LXML實現了ElementTree的API,讓你的安全與ElementTree的起步和遷移限於lxml如果你需要更好的性能或更高級的功能。

如果滿足您的需求,使用ElementTree的一大優勢是,從Python 2.5開始,它是part of the Python standard library,它減少了外部依賴和處理編譯/安裝C模塊的(可能)頭痛。

0

lxml基本上是ElementTree的超集,因此您可以從ElementTree開始,然後如果您有性能或功能問題,則可以更改爲lxml。

性能問題只能由您使用自己的數據,來研究

0

我推薦我自己的食譜

XML to Python data structure « Python recipes « ActiveState Code

它不加快解析。但它提供了一個真正的本地對象風格訪問。

>>> SAMPLE_XML = """<?xml version="1.0" encoding="UTF-8"?> 
... <address_book> 
... <person gender='m'> 
...  <name>fred</name> 
...  <phone type='home'>54321</phone> 
...  <phone type='cell'>12345</phone> 
...  <note>&quot;A<!-- comment --><![CDATA[ <note>]]>&quot;</note> 
... </person> 
... </address_book> 
... """ 
>>> address_book = xml2obj(SAMPLE_XML) 
>>> person = address_book.person 


person.gender  -> 'm'  # an attribute 
person['gender']  -> 'm'  # alternative dictionary syntax 
person.name   -> 'fred' # shortcut to a text node 
person.phone[0].type -> 'home' # multiple elements becomes an list 
person.phone[0].data -> '54321' # use .data to get the text value 
str(person.phone[0]) -> '54321' # alternative syntax for the text value 
person[0]   -> person # if there are only one <person>, it can still 
           # be used as if it is a list of 1 element. 
'address' in person -> False # test for existence of an attr or child 
person.address  -> None # non-exist element returns None 
bool(person.address) -> False # has any 'address' data (attr, child or text) 
person.note   -> '"A <note>"'