Python使用xmltodict实现XML与Dict格式互转
本文介绍在Python接口自动化测试中,如何利用xmltodict库将XML数据转换为字典格式。通过安装库、处理节点属性及文本内容,并提供封装好的转换函数,解决XML模板提取与复用的问题,适用于APP接口调试场景。
XML与Dict转换背景与方案
在接口自动化测试中,请求数据通常采用JSON格式,Python内置模块即可处理。近期在进行APP接口开发时,遇到XML格式的请求数据,处理过程较为繁琐。解决方案是:从接口文档获取XML源文件,利用在线工具将其转换为JSON格式以获取数据模板,并将该模板保存至JSON文件中,随后根据具体的接口名称进行数据提取。
- GitHub官方介绍指出,使用Python的XML模块处理数据的方式类似于操作JSON。
- 相关资源链接:https://github.com/martinblech/xmltodict
xmltodict库安装
安装xmltodict库,执行命令:pip install xmltodict。
C:\Users\wy.DESKTOP-KENPKKP\Desktop\Dingda\dingAPI>pip install xmltodict Requirement already satisfied: xmltodict in c:\users\wy.desktop-kenpkkp\appdata\local\programs\python\python36\lib\site-packages (0.12.0)
XML数据转换演示
以下直接演示具体操作流程,首先准备一份原始的XML数据作为示例。
<?xml version="1.0"?>
<mydocument has="an attribute">#has是节点属性
<and>
<many>elements</many>
<many>more elements</many>
</and>
<plus a="complex">
element as well
</plus>
</mydocument>
由于目前尚未找到直接将XML赋值给函数的简便方法,因此先使用在线转换工具将XML数据转换为JSON格式。转换后的结果如下所示。
{
"mydocument": {
"-has": "an attribute", #在这里要留意一个事情,XML是有节点的,节点有属性,json数据的键之前有-的,就是属性,但是xmltodict识别的属性是@,所以要把-替换为@(就是这里找了好久)
"and": {
"many": [
"elements",
"more elements"
]
},
"plus": {
"-a": "complex",
"#text": "
element as well
"
}
}
}
核心转换代码实现
具体示例代码演示如下。
dictdata={
"mydocument": {
"@has": "an attribute",
"and": {
"many": [
"elements",
"more elements"
]
},
"plus": {
"@a": "complex",
"#text": "element as well"
}
}
}
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的数据格式是<class 'collections.OrderedDict'>,并不直接是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 小测试
#@create 2019-10-30 15:46
import xmltodict
"""
xml和dict转换
"""
def dict_xml(dictdata):
"""
dict转xml
dictstr: dict字符串
return: xml字符串
"""
xmlstr=xmltodict.unparse(dictdata, pretty=True)
return xmlstr
def xml_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
return dictdata
总结
总结上述操作步骤与注意事项。
以上介绍了Python中XML与Dict格式转换的示例代码,希望能为读者提供帮助。如有疑问,欢迎留言,作者将及时回复。感谢对本站的支持!若本文对您有帮助,欢迎转载,请注明出处,谢谢。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









