2011-11-05 110 views
26

我一直在使用minidom来解析XML多年。现在我突然了解了元素树。我的问题是更好解析?那就是:XML解析:元素树(etree)与minidom

  • 哪个更快?
  • 哪些内存使用较少?
  • 是否有任何O(n^2)依赖我应该担心?
  • 其中一个正在贬值,而另一个呢?

为什么我们有两个接口?

谢谢。

回答

14

Python有两个接口,可能是因为元素树在minidom出现后不久就被集成到标准库中。其原因可能是与W3C控制的DOM相比,它的“Pythonic”API更加“多”。

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

如果您关心内存的使用情况,那么您不应该使用树API; PullDOM可能是一个更好的选择,但我从使用Java的优秀解析器的经验推断 - 目前似乎没有关于PullDOM的最新信息。

17

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

ElementTree包旨在提供更多的Pythonic接口。这一切都是为了让程序员更容易。

根据你的构建,每个构件都有一个底层的C实现,使它们运行得很快。

上述工具都不推荐使用。它们各有其优点(例如,Sax不需要将整个输入读入内存)。

还有第三方模块lxml这也是一个流行的选择(全功能和快速)。

+3

如果你有元素的性能问题,那么lxml提供了一个兼容的接口,但是在后台使用了一个经过强化的高度调优的C库。 – delnan