33

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

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

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

ありがとう。

4

2 に答える 2

21

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

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

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

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

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

于 2011-11-05T19:01:01.443 に答える
17

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

速度が気になる場合は、 libxml2 を使用して ElementTree 互換の DOM を構築するlxmlもあり、非常に高速です。これらには、ElementTree の Python および C 実装と比較するベンチマーク スイートが用意されています。

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

于 2011-11-05T19:10:24.910 に答える