将 Json 正确转换为 XML
Convert Json to XML properly
我有以下字典结构
[{
"Body" : [{
"Universal Lift Support" : ["1\"-9\" Extended Length",
"10\"-14.5\" Extended Length",
"15\"-19\" Extended Length",
"20\" + Extended Length"]
}]
我想使用 dicttoxml
库来获得所需的 xml- 输出,例如:
<root>
<Body>
<Universal Lift Support>
1"-9" Extended Length
10"-14.5" Extended Length
15"-19" Extended Length
20" + Extended Length
</Universal Lift Support>
但是,在应用下一个代码后:
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"-9" Extended Length</item><item>10"-14.5" Extended Length</item><item>15"-19" Extended Length</item><item>
哪些选项可以帮助格式化和获得上述输出?
可能您必须编写一个函数来按照您想要的方式为列表生成 xml:
https://github.com/quandyfactory/dicttoxml/blob/master/dicttoxml.py
(见dicttoxml函数注释)
似乎“- whatever
”模式是硬编码的,如果您使用 cdata=True,您将获得整个“”内容。
如果该软件名为dicttoxml,那么我认为期望它生成XML 是合理的。你说你想要的输出不是 XML,所以这个工具不生成它也就不足为奇了。您似乎在抱怨该产品确实按照罐头上的说明进行操作。
考虑使用内置的 Python 库(json
、xml.etree.ElementTree
和漂亮的打印 xml.dom.minidom
)遍历 json 对象和构建 XML 树。需要注意的一件事:XML 节点不能在名称中包含空格,因此它应该 <UniversalLiftSupport>
.
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"-9" Extended Length
# 10"-14.5" Extended Length
# 15"-19" Extended Length
# 20" + Extended Length</UniversalLiftSupport>
# </Body>
# </root>
# OUTPUT XML CONTENT TO FILE
with open('Output.xml','w') as f:
f.write(pretty_xml)
我有以下字典结构
[{
"Body" : [{
"Universal Lift Support" : ["1\"-9\" Extended Length",
"10\"-14.5\" Extended Length",
"15\"-19\" Extended Length",
"20\" + Extended Length"]
}]
我想使用 dicttoxml
库来获得所需的 xml- 输出,例如:
<root>
<Body>
<Universal Lift Support>
1"-9" Extended Length
10"-14.5" Extended Length
15"-19" Extended Length
20" + Extended Length
</Universal Lift Support>
但是,在应用下一个代码后:
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"-9" Extended Length</item><item>10"-14.5" Extended Length</item><item>15"-19" Extended Length</item><item>
哪些选项可以帮助格式化和获得上述输出?
可能您必须编写一个函数来按照您想要的方式为列表生成 xml: https://github.com/quandyfactory/dicttoxml/blob/master/dicttoxml.py
(见dicttoxml函数注释)
似乎“
如果该软件名为dicttoxml,那么我认为期望它生成XML 是合理的。你说你想要的输出不是 XML,所以这个工具不生成它也就不足为奇了。您似乎在抱怨该产品确实按照罐头上的说明进行操作。
考虑使用内置的 Python 库(json
、xml.etree.ElementTree
和漂亮的打印 xml.dom.minidom
)遍历 json 对象和构建 XML 树。需要注意的一件事:XML 节点不能在名称中包含空格,因此它应该 <UniversalLiftSupport>
.
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"-9" Extended Length
# 10"-14.5" Extended Length
# 15"-19" Extended Length
# 20" + Extended Length</UniversalLiftSupport>
# </Body>
# </root>
# OUTPUT XML CONTENT TO FILE
with open('Output.xml','w') as f:
f.write(pretty_xml)