1

辞書に解析したい巨大で複雑な xml ドキュメントがあります (後で sqlalchemy を使用してデータベースに格納します)。このタスクにはxmltodictを使用したいと考えています。
ただし、xmltodict は深くネストされた xml を直接解析できないようです。

私の MWE:

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<ns1:tag-1>
    <ns2:tag-2 attrib1="value" attrib2="value">
        <ns3:tag-3 attrib3="value">blabla</ns3:tag-3>
    </ns2:tag-2>
</ns1:tag-1>

test.py

import xmltodict as x2d
with open('ESCIDOC_test.xml', encoding='utf-8') as purein:
    doc = x2d.parse(purein.read())
print(doc['ns1:tag-1']['ns2:tag-2']['@attrib2'])  # works
print(doc['ns1:tag-1']['ns2:tag-2']['ns3:tag-3']['#text'] # does not work, TypeError
ns3tree = doc['ns1:tag-1']['ns2:tag-2']['ns3:tag-3'] 
print(ns3tree['#text'])  # works

機能させるために、最初に新しい変数に割り当てる必要があるのはなぜですか? とにかくxml全体が解析されますね。

print(doc)
# OrderedDict([('ns1:tag-1', OrderedDict([('ns2:tag-2', OrderedDict([('@attrib1', 'value'), ('@attrib2', 'value'), ('ns3:tag-3', OrderedDict([('@attrib3', 'value'), ('#text', 'blabla')]))]))]))])

これは、メモリの問題の可能性があるために意図されたものですか? よりエレガントな回避策はありますか?

4

1 に答える 1