4

プロジェクトの XML ファイルを処理します。以前は lxml を使用することに決めていましたが、要件を読んだ後、私の目的には ElemenTree の方が適していると思います。

処理する必要がある XML ファイルは次のとおりです。

  1. サイズが小さい。通常は 10 KB 未満です。

  2. 名前空間はありません。

  3. 単純な XML 構造。

XML のサイズが小さいため、メモリは問題になりません。私の唯一の懸念は、高速な解析です。

何を持って行けばいいですか?ほとんどの場合、人々がlxmlを推奨しているのを見てきましたが、私の解析要件を考えると、本当にそれから恩恵を受ける立場にあるのでしょうか、それともElementTreeが私の目的により適していますか?

4

3 に答える 3

3

他の人が指摘しているように、lxml は ElementTree API を実装しているため、ElementTree から始めて、パフォーマンスの向上やより高度な機能が必要な場合は lxml に移行しても安全です。

必要に応じて ElementTree を使用することの大きな利点は、Python 2.5 の時点でPython 標準ライブラリ の一部になっていることです。これにより、外部依存関係が削減され、C モジュールのコンパイル/インストールに伴う (可能性のある) 頭痛の種が削減されます。

于 2010-05-25T21:29:47.690 に答える
0

私のおすすめレシピ

XML から Python へのデータ構造 « Python レシピ « ActiveState Code

解析は高速化されません。しかし、それは真にネイティブなオブジェクト スタイルのアクセスを提供します。

>>> SAMPLE_XML = """<?xml version="1.0" encoding="UTF-8"?>
... <address_book>
...   <person gender='m'>
...     <name>fred</name>
...     <phone type='home'>54321</phone>
...     <phone type='cell'>12345</phone>
...     <note>&quot;A<!-- comment --><![CDATA[ <note>]]>&quot;</note>
...   </person>
... </address_book>
... """
>>> address_book = xml2obj(SAMPLE_XML)
>>> person = address_book.person


person.gender        -> 'm'     # an attribute
person['gender']     -> 'm'     # alternative dictionary syntax
person.name          -> 'fred'  # shortcut to a text node
person.phone[0].type -> 'home'  # multiple elements becomes an list
person.phone[0].data -> '54321' # use .data to get the text value
str(person.phone[0]) -> '54321' # alternative syntax for the text value
person[0]            -> person  # if there are only one <person>, it can still
                                # be used as if it is a list of 1 element.
'address' in person  -> False   # test for existence of an attr or child
person.address       -> None    # non-exist element returns None
bool(person.address) -> False   # has any 'address' data (attr, child or text)
person.note          -> '"A <note>"'
于 2010-05-25T22:43:57.687 に答える
0

lxml は基本的に ElementTree のスーパーセットであるため、ElementTree から始めて、パフォーマンスや機能の問題がある場合は lxml に変更できます。

パフォーマンスの問題は、独自のデータを使用してのみ調査できます。

于 2010-05-25T20:59:09.140 に答える