Python中xml和dict格式转换
在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决。最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为json格式(目的是拿到xml数据的模板),存放到json文件中,根据接口名去提取。
- github原文介绍:使用XML的Python模块感觉就像您在使用JSON
- 链接:https://github.com/martinblech/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 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格式转换的更多相关文章
- python中json与dict之间转换
Python之dict(或对象)与json之间的互相转化 在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import js ...
- Python 中 JSON和dict的转换,json的使用
一. 基础语法 在Python 的 json库中,共有四个方法.分别是: json.load() # 从文件中加载 json.loads() # 数据中加载 json.dump() # 转存到文件 j ...
- python中list和dict
字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 1 2 3 ...
- Python中list,tuple,dict,set的区别和用法
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
- python中的字典(dict),列表(list),元组(tuple)
一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...
- Ajax中XML和JSON格式的优劣比较
刚做完一个小的使用Ajax的项目.整个小项目使用JavaScript做客户端,使用PHP做服务器端.利用xmlHttpRequest组件作为交互工具,利用XML作为数据传输的格式.做完后基本做一个简单 ...
- Python中list,tuple,dict,set的区别和用法(转)
原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ...
- python 字符串str和json格式转换
最近在写一个脚本,需要处理从excel中读取的数据,发现读取的json格式数据进行转换时报错 ValueError: Expecting property name enclosed in doubl ...
- python中map()和dict()的用法
map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map ...
随机推荐
- j2ee开发之struts2框架学习笔记
Struts2框架技术重点笔记 1.Struts2 是在webwork基础上发展而来. 2.Struts2 不依赖struts API和 servlet API 3.Struts2提供了拦截器,表现层 ...
- Logrotate配置
目录 Logrotate配置 参考 Logrotate Description Logrotate Configuration Logrotate配置
- Linux kail安装及查看命令
Linux kail安装及查看命令 apt-get update //更新源 apt-get install package ...
- Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- TensorFlow2.0(六):Dataset
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- asp.net core 腾讯验证码的接入
asp.net core 腾讯验证码的接入 Intro 之前使用的验证码服务是用的极验验证,而且是比较旧的,好久之前接入的,而且验证码服务依赖 Session,有点不太灵活,后来发现腾讯也有验证码服务 ...
- burp插件之xssValidator
0x01 安装环境 Phantomjs 下载:http://phantomjs.org/download.html 下载后配置环境变量,把bin目录下的这个exe加入环境变量 xssValidator ...
- Qt 找不到rc.exe
Qt在window下出现编译错误: LINK : fatal error LNK1158: 无法运行“rc.exe” 解决: 找到rc.exe的放置路径,比如我的在下面: C:\Program Fil ...
- Jackson替换fastjson
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化.那么作为大量使用的基础框架,为什么还要进行替 ...
- 【RabbitMQ 实战指南】一 过期时间TTL
RabbitMQ 可以对消息和队列设置过期时间(TTL) 1.设置消息的TTL 目前有两种方式可以设置消息的TTL 第一种方式是通过队列属性设置,队列中所有消息都有相同的过期时间 第二种方式是对消息本 ...