这是一件小事,真的:我有这个函数可以将 dict 对象转换为 xml。
这是功能:
def dictToXml(d):
from xml.sax.saxutils import escape
def unicodify(o):
if o is None:
return u'';
return unicode(o)
lines = []
def addDict(node, offset):
for name, value in node.iteritems():
if isinstance(value, dict):
lines.append(offset + u"<%s>" % name)
addDict(value, offset + u" " * 4)
lines.append(offset + u"</%s>" % name)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
lines.append(offset + u"<%s>" % name)
addDict(item, offset + u" " * 4)
lines.append(offset + u"</%s>" % name)
else:
lines.append(offset + u"<%s>%s</%s>" % (name, escape(unicodify(item)), name))
else:
lines.append(offset + u"<%s>%s</%s>" % (name, escape(unicodify(value)), name))
addDict(d, u"")
lines.append(u"")
return u"\n".join(lines)
例如,它转换这个字典
{ 'site': { 'name': 'stackoverflow', 'blogger': [ 'Jeff', 'Joel' ] } }
到:
<site>
<name>stackoverflow</name>
<blogger>jeff</blogger>
<blogger>joel</blogger>
</site>
它有效,但该addDict
功能看起来有点过于重复。我确信有一种方法可以将它重构为 3 个名为和的协同递归函数addDict
,但我的大脑卡住了。有什么帮助吗?addList
addElse
此外,任何摆脱offset +
每一行中的东西的方法都会很好。
注意:我选择这些语义是因为我试图匹配org.json中的json-to-xml 转换器的行为,我在项目的不同部分中使用了它。如果您只是为了寻找字典到 xml 转换器而进入此页面,那么在某些答案中有一些非常好的选择。(特别是pyfo)。