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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。