【发布时间】:2016-04-12 17:17:58
【问题描述】:
根据 xml 文件的布局获取特定值非常简单。 (见:StackOverflow)
但是当我不知道 xml 元素时,我不能递归它。 由于 xmltodoc 在 OrderedDicts 中嵌套了 OrderedDicts。这些嵌套的 OrderedDicts 由 Python 典型化为类型:'unicode'。而不是(仍然)作为 OrderedDicts。因此像这样循环,不起作用:
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)添加一个案例?跨度> -
哦,是的。错字。谢谢。
-
您是否在尝试解析 xml?或者你要去哪里?
-
是的,我正在尝试解析 xml。只需要 xml 文件中的所有值(带有相应的键),而不需要逐字命名 xml 元素。