2011-11-05 103 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