Python ElementTree APIの設計上の意思決定にはちょっと混乱しています。これらは多少恣意的に見えるので、これらの決定に何らかの論理があるかどうかを確認したいと思いますそれとも、それらがほんの少しだけアドホックであるならば、Python ElementTree:ElementTree vsRoot要素
一般的に、ElementTree
を生成する2つの方法があります.1つは、ファイルやその他のI/Oストリームのような、ある種のソースストリーム経由です。これは、parse()
関数またはElementTree.parse()
クラスメソッドによって実現されます。
もう1つの方法は、XMLを文字列オブジェクトから直接ロードすることです。これはfromstring()
機能を介して行うことができます。
大丈夫です。さて、私はこれらの関数が基本的に同じであると思います。その2つの関数の違いは、基本的には入力のソースです(ファイルまたはストリームオブジェクトを取り、もう一方はプレーンストリングを取ります)。何らかの理由でparse()
関数がElementTree
オブジェクトを返しますが、fromstring()
関数はElement
オブジェクトを返します。違いは基本的にElement
オブジェクトがXMLツリーのルート要素であるのに対し、ElementTree
オブジェクトはいくつかの追加機能を提供するルート要素の周りの「ラッパー」の一種です。 を呼び出すことによって、ElementTree
オブジェクトからいつでもルート要素を取得できます。
まだ、私はこの区別があるのは混乱しています。 fromstring()
はルート要素を直接返しますが、parse()
はElementTree
オブジェクトを返します。この区別の後ろにいくつかの論理がありますか?
を書くことは簡単ですので、 'ElementTree'のAPIは、時にはいくつかの本当に奇妙な意思決定を持っており、これはその一つです。 – gsnedders
私はlxmlで動作し、apiは同じです。私もこれらの質問に対する答えを知りたいです。私はラッパーレベルで物事を維持する傾向があるが、私は理由を知らない。 –
ElementTreeにはElementよりも多くの機能があります(特に 'write()')。私は、これらの要素がElementに提供できないと言っているわけではありませんが、それは大きな違いです。 'fromstring()'は、要素のみを与えることで、ツリーの変更や書き込みを効果的に防ぎます。 – remram