私は何年もの間、XMLを解析するためにminidomを使用してきました。今、私は突然エレメントツリーについて学びました。構文解析に適した私の質問はどれですか?あれは:
- どちらが速いですか?
- どちらがより少ないメモリを使用しますか?
- 心配すべきO(n ^ 2)依存関係はありますか?
- あるものが別のものに有利に減価償却されていますか?
なぜ2つのインターフェースがあるのですか?
ありがとう。
私は何年もの間、XMLを解析するためにminidomを使用してきました。今、私は突然エレメントツリーについて学びました。構文解析に適した私の質問はどれですか?あれは:
なぜ2つのインターフェースがあるのですか?
ありがとう。
XML解析用のDOMおよびSaxインターフェースは、XMLを操作するための古典的な方法です。これらのインターフェースはよく知られており、標準であるため、Pythonはこれらのインターフェースを提供する必要がありました。
ElementTreeパッケージは、よりPythonicなインターフェースを提供することを目的としていました。それはすべて、プログラマーにとって物事を簡単にすることです。
ビルドに応じて、それぞれに基盤となるC実装があり、高速に実行できます。
上記のツールはいずれも非推奨ではありません。それぞれにメリットがあります(たとえば、Saxは入力全体をメモリに読み込む必要はありません)。
lxmlと呼ばれるサードパーティのモジュールもあります。これも人気のある選択肢です(フル機能で高速)。
Python には 2 つのインターフェイスがあります。これは、minidom が登場してからかなり後に Element Tree が標準ライブラリに統合されたためと思われます。この理由は、W3C 制御の DOM と比較して、はるかに「Pythonic」な API である可能性があります。
速度が気になる場合は、 libxml2 を使用して ElementTree 互換の DOM を構築するlxmlもあり、非常に高速です。これらには、ElementTree の Python および C 実装と比較するベンチマーク スイートが用意されています。
メモリの使用が気になる場合は、とにかくツリー API を使用しないでください。PullDOM の方が良い選択かもしれませんが、私は Java の優れたプル パーサーを使用した経験から推測しています。PullDOM に関する現在の情報はあまりないようです。