0

Python xmltodict に問題があります。ほぼコンセンサスの推奨事項hereに従って、 xmltodict を試してみましたが、ハンドラーのトップ レベルで属性にアクセスする必要が生じるまで、非常に気に入りました。私はおそらく何か間違ったことをしているのですが、私には何が明らかではありません。このようなxmlドキュメントがあります

<api>
<cons id="79550" modified_dt="1526652449">
<firstname>Mackenzie</firstname>
...
</cons>
<cons id="79551" modified_dt="1526652549">
<firstname>Joe</firstname>
...
</cons>
<api>

私はこれでそれを解析します:

xmltodict.parse(apiResult.body, item_depth=2, item_callback=handler, xml_attribs=True)

apiResult.body上記のxmlが含まれています。しかし、 元の要素はすべて表示されますが、ハンドラーで解析した後、出力にorがxml_attribs=True表示されません。@id@modified_dt

ハンドラーは次のようにコーディングされます。

def handler(_, cons):
    print (cons)
    mc = MatchChecker(cons)
    mc.check()
    return True

私は何を間違っているのでしょうか?

私はxmljsonも試しましたが、この問題を回避する方法があれば、xmltodictと同様にすぐに気に入りません。この問題の解決策や、これをより適切に処理するパッケージを持っている人はいますか?

4

1 に答える 1

1

xmltodict正常に動作しますが、引数item_depth=2を解析しています。つまり、ハンドラーは要素自体<cons>ではなく、要素内の要素のみを認識します。<cons>

xml = """
<api>
<cons id="79550" modified_dt="1526652449">
<firstname>Mackenzie</firstname>
</cons>
</api>
"""

def handler(_,arg):
    for i in arg.items():
        print(i)
    return True

xmltodict.parse(xml, item_depth=2, item_callback=handler, xml_attribs=True)

('firstname', 'Mackenzie')期待どおりに印刷されます。

一方:

xmltodict.parse(xml, item_depth=1, item_callback=handler, xml_attribs=True)

('cons', OrderedDict([('@id', '79550'), ('@modified_dt', '1526652449'), ('firstname', 'Mackenzie')]))再び期待どおりに印刷されます。

于 2018-05-18T21:28:27.753 に答える