tarafından oluşturulan tüm iç içe anahtar-değer çiftleri aracılığıyla oldukça yalındır. Ben xml-elemanlarını bilmiyorum ben üzerinden recurse olamazPython: Döngü bir xml dosya düzeni dayalı belirli bir değer alma xmltodict
Ama: (StackOverflow bakınız). OrderedDicts içinde xmltodoc yuvalarını OrderedDicts yana . Bu iç içe geçmiş OrderedDicts, Python tarafından tip: 'unicode' olarak tanımlanır. Ve (hala) OrderedDicts olarak değil. Ne temelde istediğiniz her anahtar-değer çifti gösterilmiştir bütün xml dosyası üzerinde özyinelemeli olduğunu
def myprint(d):
for k, v in d.iteritems():
if isinstance(v, list):
myprint(v)
else:
print "Key :{0}, Value: {1}".format(k, v)
: Böyle üzerinde döngü halde, işi doens't. Ve bir anahtarın bir değeri, anahtar-değer çiftlerinin başka bir listesi olduğunda, tekrar etmelidir. giriş olarak bu XML dosyası ile
:
<?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>
ve yukarıda listelenen kod oturumu altında tüm veriler temel oturumu için bir değer olarak eklenir.
Örnek çıkışı:
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')])])]))])
Ve bu ne istiyorum açıkçası değildir.
...
Key :@name, Value: Employee
Key :@isMandotory, Value: True
Key :#text, Value: Jake Roberts
Key :@name, Value: Section
Key :@isOpen, Value: True
Key :@isMandotory, Value: False
Key :#text, Value: 5
...
:
def myprint(d):
if isinstance(d,dict): #check if it's a dict before using .iteritems()
for k, v in d.iteritems():
if isinstance(v, (list,dict)): #check for either list or dict
myprint(v)
else:
print "Key :{0}, Value: {1}".format(k, v)
elif isinstance(d,list): #allow for list input too
for item in d:
myprint(item)
o zaman böyle bir çıkış şey elde edecektir: daha sonra verilerdeki bir liste rastlarsanız
sizin girinti nedir? –
Oh, evet. Tipo. Teşekkürler. – JakeRoberts
xml'yi ayrıştırmaya mı çalışıyorsunuz?Ya da nereye gidiyorsun? – securecurve