Python中xml和dict格式转换的示例代码
在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决。最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为json格式(目的是拿到xml数据的模板),存放到json文件中,根据接口名去提取。
- github原文介绍:使用XML的Python模块感觉就像您在使用JSON
- 链接:https://github.com/martinblech/xmltodict
下载xmltodict(pipinstallxmltodict)
C:\Users\wy.DESKTOP-KENPKKP\Desktop\Dingda\dingAPI>pip installxmltodict
Requirementalreadysatisfied:xmltodictinc:\users\wy.desktop-kenpkkp\appdata\local\programs\python\python36\lib\site-packages
(0.12.0)
直接演示了,准备一个原始的XML的数据
#has是节点属性 elements moreelements elementaswell
由于目前没有找到能够将XML直接赋值给函数的方法,所以先用在线转化工具将XML转化为JSON,转化后的结果为
{
"mydocument":{
"-has":"anattribute",#在这里要留意一个事情,XML是有节点的,节点有属性,json数据的键之前有-的,就是属性,但是xmltodict识别的属性是@,所以要把-替换为@(就是这里找了好久)
"and":{
"many":[
"elements",
"moreelements"
]
},
"plus":{
"-a":"complex",
"#text":"
elementaswell
"
}
}
}
示例代码
dictdata={
"mydocument":{
"@has":"anattribute",
"and":{
"many":[
"elements",
"moreelements"
]
},
"plus":{
"@a":"complex",
"#text":"elementaswell"
}
}
}
xmldata=xmltodict.unparse(dictdata,pretty=True)#dict转xml
print(xmldata)#解析结果可以复制运行查看,结果是原始数据
new_dictdata=xmltodict.parse(xmldata,process_namespaces=True)#xml转dict
print(new_dictdata)#在这里有一个注意事项,new_dictdata的数据格式是,并不直接是dict,需要自行处理
"""
处理方式如下
"""
key_dictdata=dict(new_dictdata)
value_dictdata=dict(dict(new_dictdata)["mydocument"])
key_dictdata["mydocument"]=value_dictdata
print(key_dictdata)
上面就是xml和dict转化,如果需要转化json,内置的json模块就可以完成,但是在自动化测试框架中这样使用比较麻烦,而且复用性不好,封装好如下
#-*-coding:utf-8-*
#@author小测试
#@create2019-10-3015:46
importxmltodict
"""
xml和dict转换
"""
defdict_xml(dictdata):
"""
dict转xml
dictstr:dict字符串
return:xml字符串
"""
xmlstr=xmltodict.unparse(dictdata,pretty=True)
returnxmlstr
defxml_dict(xmldata,moudle):
"""
xml转dict
xmlstr:xml字符串
moudle:根节点
return:dict字符串
"""
data=xmltodict.parse(xmldata,process_namespaces=True)
dictdata=dict(data)
_dictdata=dict(dictdata[moudle])
dictdata[moudle]=_dictdata
returndictdata
总结
以上所述是小编给大家介绍的Python中xml和dict格式转换的示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。