XML解析:元素树(etree)与minidom

时间:2011-11-05 18:56:46

标签: python xml-parsing elementtree minidom

我多年来一直使用minidom解析XML。现在我突然了解了Element Tree。我的问题是更好进行解析?那就是:

  • 哪个更快?
  • 哪个使用更少的内存?
  • 我应该担心任何O(n ^ 2)依赖关系吗?
  • 是否有人赞成另一人?

为什么我们有两个接口?

感谢。

2 个答案:

答案 0 :(得分:19)

用于XML解析的DOM和Sax接口是使用XML的经典方法。 Python必须提供这些接口,因为它们是众所周知的标准。

ElementTree包旨在提供更多的Pythonic界面。这一切都是为了让程序员更轻松。

根据您的构建,每个构建都有一个基础C实现,使它们运行得很快。

以上所有工具均未被弃用。它们各有其优点(例如,Sax不需要将整个输入读入内存)。

还有一个名为lxml的第三方模块,它也是一个受欢迎的选择(全功能和快速)。

答案 1 :(得分:14)

Python有两个接口,可能是因为Element Tree在minidom出现之后被很好地集成到了标准库中。与W3C控制的DOM相比,其原因可能是更多的“Pythonic”API。

如果您关心速度,还有lxml,它使用libxml2构建一个与ElementTree兼容的DOM,应该非常快 - 他们有一个基准套件,将自己与ElementTree的Python和C实现相比较。

如果你担心内存使用,你不应该使用树API; PullDOM可能是一个更好的选择,但我从使用Java优秀的pull解析器的经验中推断 - 在PullDOM上似乎没有太多当前信息。