多年来,我一直在使用 minidom 解析 XML。现在我突然了解了元素树。我的问题哪个更适合解析?那是:
- 哪个更快?
- 哪个使用更少的内存?
- 是否有任何我应该担心的 O(n^2) 依赖项?
- 一个人贬值是为了另一个人吗?
为什么我们有两个接口?
谢谢。
多年来,我一直在使用 minidom 解析 XML。现在我突然了解了元素树。我的问题哪个更适合解析?那是:
为什么我们有两个接口?
谢谢。
用于 XML 解析的 DOM 和 Sax 接口是使用 XML 的经典方法。Python 必须提供这些接口,因为它们是众所周知且标准的。
ElementTree 包旨在提供更 Pythonic 的界面。这一切都是为了让程序员更轻松。
根据您的构建,它们中的每一个都有一个底层 C 实现,使它们运行得更快。
以上工具均未弃用。它们各有优点(例如,Sax 不需要将整个输入读入内存)。
还有一个名为lxml的第三方模块,它也是一种流行的选择(功能齐全且速度快)。
Python 有两个接口可能是因为 Element Tree 在 minidom 出现之后很晚才被集成到标准库中。其原因可能是它比 W3C 控制的 DOM 更“Pythonic”的 API。
如果您关心速度,还有lxml,它使用 libxml2 构建与 ElementTree 兼容的 DOM,并且应该非常快——它们有一个基准套件,可与 ElementTree 的 Python 和 C 实现进行比较。
如果您担心内存使用,则无论如何都不应该使用树 API。PullDOM 可能是一个更好的选择,但我是根据使用 Java 出色的 pull 解析器的经验推断的——目前关于 PullDOM 的信息似乎并不多。