簡體   English   中英

我應該使用哪個Python XML庫?

[英]Which Python XML library should I use?

我將處理項目的XML文件。 我之前決定使用lxml,但在閱讀了要求之后,我認為ElemenTree會更好用於我的目的。

必須處理的XML文件是:

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

  2. 沒有名稱空間。

  3. 簡單的XML結構。

鑒於XML的大小,內存不是問題。 我唯一關心的是快速解析。

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

正如其他人所指出的,lxml實現了ElementTree API,因此如果您需要更好的性能或更高級的功能,那么從ElementTree開始安全並遷移到lxml。

如果它滿足您的需求,使用ElementTree的最大優點是,從Python 2.5開始,它是Python標准庫的一部分 ,它減少了外部依賴性和處理編譯/安裝C模塊的(可能)頭痛。

lxml基本上是ElementTree的超集,所以你可以從ElementTree開始,然后如果你有性能或功能問題,那么你可以改為lxml。

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

我推薦自己的食譜

XML到Python的數據結構«Python食譜«ActiveState代碼

它不會加速解析。 但它提供了真正的本機對象樣式訪問。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM