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

vy3*_*y32 29 python elementtree minidom xml-parsing

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

  • 哪个更快?
  • 哪个使用更少的内存?
  • 要么有任何O(n ^ 2)依赖关系我应该担心?
  • 是否有人为了另一个而贬值?

为什么我们有两个接口?

谢谢.

Ray*_*ger 19

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

ElementTree包旨在提供更多Pythonic接口.这一切都是为了让程序员更轻松.

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

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

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

  • 如果你对元素有性能问题,那么lxml提供兼容的接口,但在幕后使用经过强化,经过高度调整的C库. (3认同)

mil*_*ose 15

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

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

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