web-dev-qa-db-ja.com

XML解析:要素ツリー(etree)とミニドム

私は何年もの間、XMLを解析するためにminidomを使用してきました。今、私は突然エレメントツリーについて学びました。私の質問はより良い構文解析のためですか?あれは:

  • どちらが速いですか?
  • どちらがより少ないメモリを使用しますか?
  • 心配すべきO(n ^ 2)依存関係はありますか?
  • あるものが別のものに有利に減価償却されていますか?

なぜ2つのインターフェースがあるのですか?

ありがとう。

30
vy32

Pythonには2つのインターフェースがあります。これはおそらく、ミニダムが登場してからかなり後にElementTreeが標準ライブラリに統合されたためです。この理由は、W3Cで制御されるDOMと比較してはるかに「Pythonic」なAPIである可能性があります。

速度が気になる場合は、 lxml もあります。これはlibxml2を使用してElementTree互換のDOMを構築し、非常に高速である必要があります。これらには、ElementTreeのPythonおよびCの実装が利用可能です。

メモリの使用が心配な場合は、とにかくツリーAPIを使用しないでください。 PullDOMの方が良い選択かもしれませんが、私はJavaの優れたプルパーサーを使用した経験から推測しています。PullDOMに関する現在の情報はあまりないようです。

15
millimoose

XML解析用のDOMおよびSaxインターフェースは、XMLを操作するための古典的な方法です。 Pythonはよく知られていて標準的であるため、これらのインターフェイスを提供する必要がありました。

ElementTreeパッケージは、よりPythonicなインターフェースを提供することを目的としていました。プログラマーにとって物事を簡単にすることがすべてです。

ビルドに応じて、それぞれに基盤となるC実装があり、高速に実行できます。

上記のツールはいずれも非推奨ではありません。それぞれにメリットがあります(たとえば、Saxは入力全体をメモリに読み込む必要はありません)。

lxml と呼ばれるサードパーティのモジュールもあります。これも人気のある選択肢です(フル機能で高速)。

19