首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确地将Json转换为XML

正确地将Json转换为XML
EN

Stack Overflow用户
提问于 2017-07-06 00:41:45
回答 3查看 5.1K关注 0票数 0

我有以下字典结构

代码语言:javascript
复制
[{
    "Body" : [{
        "Universal Lift Support" : ["1\"-9\" Extended Length",
                                    "10\"-14.5\" Extended Length",
                                    "15\"-19\" Extended Length",
                                    "20\" + Extended Length"]
    }]

我想使用xml库来获得所需的dicttoxml输出,如下所示:

代码语言:javascript
复制
<root>
    <Body>
        <Universal Lift Support>
            1"-9" Extended Length
            10"-14.5" Extended Length
            15"-19" Extended Length
            20" + Extended Length
        </Universal Lift Support>

但是,在应用下一段代码之后:

代码语言:javascript
复制
dicttoxml.dicttoxml(result, attr_type=False, root=True)

我得到的xml结构如下:

<?xml version="1.0" encoding="UTF-8" ?><root><item><Body><item><Universal_Lift_Support><item>1&quot;-9&quot; Extended Length</item><item>10&quot;-14.5&quot; Extended Length</item><item>15&quot;-19&quot; Extended Length</item><item>

哪些选项可以帮助格式化并获得上面描述的输出?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-06 04:48:58

考虑使用遍历json对象并构建XML树的内置Python库(jsonxml.etree.ElementTree和to pretty print、xml.dom.minidom)。需要注意的一件事是: XML节点的名称中不能包含空格,因此应该使用<UniversalLiftSupport>

代码语言:javascript
复制
import json
import xml.etree.ElementTree as ET
import xml.dom.minidom

with open('BodyUniversal.json') as f:  
    jsondata = json.load(f)

# INITIALIZING XML DOC AND PARENT TAGS
root = ET.Element('root')
body = ET.SubElement(root, 'Body')
uls = ET.SubElement(body, 'UniversalLiftSupport')
uls.text = ''

# ITERATE THROUGH LIST, APPENDING TO XML
for i in jsondata[0]['Body'][0]['Universal Lift Support']:
    uls.text = uls.text + '\n\t\t\t' + i

# OUTPUT AND PRETTY PRINT TREE
tree_out = ET.tostring(root, encoding="UTF-8")
newXML = xml.dom.minidom.parseString(tree_out.decode('UTF-8'))
pretty_xml = newXML.toprettyxml()    

print(pretty_xml)
# <?xml version="1.0" ?>
# <root>
#         <Body>
#                 <UniversalLiftSupport>
#                         1&quot;-9&quot; Extended Length
#                         10&quot;-14.5&quot; Extended Length
#                         15&quot;-19&quot; Extended Length
#                         20&quot; + Extended Length</UniversalLiftSupport>
#         </Body>
# </root>

# OUTPUT XML CONTENT TO FILE
with open('Output.xml','w') as f:
    f.write(pretty_xml)
票数 1
EN

Stack Overflow用户

发布于 2017-07-06 01:11:37

您可能需要编写一个函数来以您想要的方式为列表生成xml:https://github.com/quandyfactory/dicttoxml/blob/master/dicttoxml.py

(参见dicttoxml函数注释)

看起来“随便”模式都是硬编码的,如果你使用cdata=True,你就会得到所有的东西。

票数 0
EN

Stack Overflow用户

发布于 2017-07-06 03:44:34

如果这个软件被称为dicttoxml,那么我认为期望它生成XML是合理的。您说需要的输出不是XML,所以这个工具不能生成它也就不足为奇了。你似乎在抱怨产品做了罐头上所说的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44931787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档