xmlファイルのレイアウトに基づいて特定の値を取得するのは簡単です。 (StackOverflow)Python:xmltodictで作成されたすべてのネストされたキーと値のペアをループします。
しかし、私がXML要素を知らないとき、私はそれを再帰することはできません。 xmltodocはOrderedDictsでOrderedDictsをネストしているので。これらの入れ子にされたOrderedDictsは、Pythonによって型: 'unicode'としてtypingされています。 OrderedDictsではなく(まだ)。そのためには、このようにオーバールーピング、doens't仕事:
def myprint(d):
for k, v in d.iteritems():
if isinstance(v, list):
myprint(v)
else:
print "Key :{0}, Value: {1}".format(k, v)
私は基本的には欲しいが、すべてのキーと値のペアが示されている全体のxmlファイルの上に再帰することです。そして、キーの値が別のキーと値のペアのリストである場合、それはそのキーに再帰的に入ります。入力として、このXMLファイルで
:
<?xml version="1.0" encoding="utf-8"?>
<session id="2934" name="Valves" docVersion="5.0.1">
<docInfo>
<field name="Employee" isMandotory="True">Jake Roberts</field>
<field name="Section" isOpen="True" isMandotory="False">5</field>
<field name="Location" isOpen="True" isMandotory="False">Munchen</field>
</docInfo>
</session>
と上記のコードは、セッションの下のすべてのデータは、セッション鍵の値として加算されます。
出力例:
Key :session, Value: OrderedDict([(u'@id', u'2934'), (u'@name', u'Valves'), (u'@docVersion', u'5.0.1'), (u'docInfo', OrderedDict([(u'field', [OrderedDict([(u'@name', u'Employee'), (u'@isMandotory', u'True'), ('#text', u'Jake Roberts')]), OrderedDict([(u'@name', u'Section'), (u'@isOpen', u'True'), (u'@isMandotory', u'False'), ('#text', u'5')]), OrderedDict([(u'@name', u'Location'), (u'@isOpen', u'True'), (u'@isMandotory', u'False'), ('#text', u'Munchen')])])]))])
そして、これは私が欲しいものは明らかではありません。
'else'文の字下げはforループの後にありますが、あなたが意図したものではないと思いますし、' isinstance(v、list) 'の大文字小文字を追加できないのはなぜですか? –
ああ、そうです。打ち間違え。ありがとう。 – JakeRoberts
xmlを解析しようとしていますか?あなたはどこに向かいますか? – securecurve