4

我将为一个项目处理 XML 文件。我早些时候决定使用 lxml,但在阅读了要求之后,我认为 ElemenTree 会更好地满足我的目的。

必须处理的 XML 文件是:

  1. 体积小。通常 < 10 KB。

  2. 没有命名空间。

  3. 简单的 XML 结构。

鉴于 XML 的大小很小,内存不是问题。我唯一关心的是快速解析。

我应该带什么去?大多数情况下,我看到人们推荐 lxml,但考虑到我的解析要求,我真的可以从中受益还是 ElementTree 会更好地服务于我的目的?

4

3 回答 3

3

正如其他人指出的那样,lxml 实现了 ElementTree API,因此如果您需要更好的性能或更高级的功能,您可以安全地从 ElementTree 开始并迁移到 lxml。

如果满足您的需求,使用 ElementTree 的最大优势在于,从 Python 2.5 开始,它是Python 标准库的一部分,它减少了外部依赖和(可能)处理编译/安装 C 模块的麻烦。

于 2010-05-25T21:29:47.690 回答
0

lxml 基本上是 ElementTree 的超集,因此您可以从 ElementTree 开始,然后如果您遇到性能或功能问题,则可以更改为 lxml。

性能问题只能由您使用自己的数据进行研究,

于 2010-05-25T20:59:09.140 回答
0

我推荐我自己的食谱

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>"'
于 2010-05-25T22:43:57.687 回答