根据xml文件的布局获取特定的值非常简单。(参见:StackOverflow)
但是当我不知道xml元素时,我就不能递归它。 因为xmltodoc在OrderedDicts中嵌套OrderedDicts。Python将这些嵌套的ordereddict类型化为“unicode”。而不是(仍然)按顺序排列的图片。所以像这样循环是行不通的:
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文件作为输入:
^{pr2}$而上面列出的代码中,session下的所有数据都作为一个值添加到key 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')])])]))])
这显然不是我想要的。在
如果在数据中遇到一个列表,则只需对列表的每个元素调用
myprint
:然后您将得到如下输出:
^{pr2}$虽然我不确定这有多有用,因为您有很多重复的键,比如
@name
,但是我想提供一个我不久前创建的函数来遍历嵌套的dict
s和list
的嵌套json
数据:然后,您可以使用以下方法遍历数据:
使用
prev_path
和path_repr
的默认值,输出如下:尽管您可以为
path_repr
编写一个函数来获取prev_path
的值(通过递归调用path_repr
)和新的键,例如,一个获取元组并在末尾添加另一个元素的函数意味着我们可以获得(索引元组:elem)格式,它非常适合传递给dict
构造函数它提供了以下字典格式的数据:
在处理json数据时,我发现这一点特别有用,但我不确定您想如何处理xml。在
相关问题 更多 >
编程相关推荐