0

iterparse を使用して xml ドキュメントを解析しています。

from lxml import etree
import tempfile

content = """<root xmlns="blah.com">
   <foo>
      <attribute id="3" />
   </foo>
   <foo>
      <structure>
         <baz>
            <x>g</x>
         </baz>
      </structure>
   </foo>
</root>"""

src_file = tempfile.NamedTemporaryFile()
src_file.write(content)
src_file.flush()

context = etree.iterparse(
        src_file.name,
        events=("end", ),
        tag="foo",
    )

for event, element in context:
    print event
    print element
  • 期待される結果: いくつかendのイベントが表示されます
  • 実際の結果: 何も起こらない

私が試したいくつかのこと:

  • xml から名前空間を削除すると、正常に動作します。
  • のようなプレフィックスを持つ名前空間を使用すると、正常にxlmns:t="blah.com"動作します。
  • を削除するtag="foo"と、正常に動作します。

ただし、ベース タグとデフォルトの名前空間の両方を使用したいと考えています。これは iterparse のバグですか? 私は他に何か間違ったことをしていますか?

編集: コードを編集して、ident エラーなしでコピーして貼り付けることができるようにしました。

4

1 に答える 1