在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决。最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为json格式(目的是拿到xml数据的模板),存放到json文件中,根据接口名去提取。

下载xmltodict(pip install xmltodict)

  1. C:\Users\wy.DESKTOP-KENPKKP\Desktop\Dingda\dingAPI>pip install xmltodict
  2. Requirement already satisfied: xmltodict in c:\users\wy.desktop-kenpkkp\appdata\local\programs\python\python36\lib\site-packages
  3. (0.12.0)

直接演示了,准备一个原始的XML的数据

  1. <?xml version="1.0"?>
  2. <mydocument has="an attribute">#has是节点属性
  3. <and>
  4. <many>elements</many>
  5. <many>more elements</many>
  6. </and>
  7. <plus a="complex">
  8. element as well
  9. </plus>
  10. </mydocument>

由于目前没有找到能够将XML直接赋值给函数的方法,所以先用在线转化工具将XML转化为JSON,转化后的结果为

  1. {
  2. "mydocument": {
  3. "-has": "an attribute", #在这里要留意一个事情,XML是有节点的,节点有属性,json数据的键之前有-的,就是属性,但是xmltodict识别的属性是@,所以要把-替换为@(就是这里找了好久)
  4. "and": {
  5. "many": [
  6. "elements",
  7. "more elements"
  8. ]
  9. },
  10. "plus": {
  11. "-a": "complex",
  12. "#text": "
  13. element as well
  14. "
  15. }
  16. }
  17. }

示例代码

  1. dictdata={
  2. "mydocument": {
  3. "@has": "an attribute",
  4. "and": {
  5. "many": [
  6. "elements",
  7. "more elements"
  8. ]
  9. },
  10. "plus": {
  11. "@a": "complex",
  12. "#text": "element as well"
  13. }
  14. }
  15. }
  16. xmldata=xmltodict.unparse(dictdata,pretty=True)#dictxml
  17. print(xmldata)#解析结果可以复制运行查看,结果是原始数据
  18. new_dictdata=xmltodict.parse(xmldata,process_namespaces = True)#xmldict
  19. print(new_dictdata)#在这里有一个注意事项,new_dictdata的数据格式是<class 'collections.OrderedDict'>,并不直接是dict,需要自行处理
  20. """
  21. 处理方式如下
  22. """
  23. key_dictdata=dict(new_dictdata)
  24. value_dictdata=dict(dict(new_dictdata)["mydocument"])
  25. key_dictdata["mydocument"]=value_dictdata
  26. print(key_dictdata)

上面就是xml和dict转化,如果需要转化json,内置的json模块就可以完成,但是在自动化测试框架中这样使用比较麻烦,而且复用性不好,封装好如下

  1. #-*- coding: utf-8 -*
  2. #@author 小测试
  3. #@create 2019-10-30 15:46
  4. import xmltodict
  5. """
  6. xml和dict转换
  7. """
  8. def dict_xml(dictdata):
  9. """
  10. dict转xml
  11. dictstr: dict字符串
  12. return: xml字符串
  13. """
  14. xmlstr=xmltodict.unparse(dictdata, pretty=True)
  15. return xmlstr
  16. def xml_dict(xmldata,moudle):
  17. """
  18. xml转dict
  19. xmlstr: xml字符串
  20. moudle:根节点
  21. return: dict字符串
  22. """
  23. data=xmltodict.parse(xmldata,process_namespaces = True)
  24. dictdata=dict(data)
  25. _dictdata=dict(dictdata[moudle])
  26. dictdata[moudle]=_dictdata
  27. return dictdata

Python中xml和dict格式转换的更多相关文章

  1. python中json与dict之间转换

    Python之dict(或对象)与json之间的互相转化 在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import js ...

  2. Python 中 JSON和dict的转换,json的使用

    一. 基础语法 在Python 的 json库中,共有四个方法.分别是: json.load() # 从文件中加载 json.loads() # 数据中加载 json.dump() # 转存到文件 j ...

  3. python中list和dict

    字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 1 2 3 ...

  4. Python中list,tuple,dict,set的区别和用法

    Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...

  5. python中的字典(dict),列表(list),元组(tuple)

    一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...

  6. Ajax中XML和JSON格式的优劣比较

    刚做完一个小的使用Ajax的项目.整个小项目使用JavaScript做客户端,使用PHP做服务器端.利用xmlHttpRequest组件作为交互工具,利用XML作为数据传输的格式.做完后基本做一个简单 ...

  7. Python中list,tuple,dict,set的区别和用法(转)

    原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ...

  8. python 字符串str和json格式转换

    最近在写一个脚本,需要处理从excel中读取的数据,发现读取的json格式数据进行转换时报错 ValueError: Expecting property name enclosed in doubl ...

  9. python中map()和dict()的用法

    map()用法 map()是python的内置函数,会根据提供的函数对指定序列做映射. 语法: map(func, iter, ...) 其中func为一个功能函数,iter表示可迭代参数序列.map ...

随机推荐

  1. linux分析利刃之sar命令详解

    一.sar的概述 在我使用的众多linux分析工具中,sar是一个非常全面的一个分析工具,可以比较瑞士军刀,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可 ...

  2. chown、chgrp、chmod

    1.权限对应的数值 一开始理解权限对应的数值总是要去用二进制去算例如r-x是多少rwx是多少,后来才知道r就 是4,w就是2,x就是1,不管权限怎么变,他们对应的数值就是对应位相加.. 权限对于文件来 ...

  3. java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(下)注解配置,统一错误处理和拦截器

    我们上次大致说完了执行流程,也只是说了大致的过程,还有中间会出错的情况我们来处理一下. 统一异常处理 比如我们的运行时异常的500错误.我们来自定义一个类 package com.springmvcb ...

  4. spring源码分析系列2:Bean与BeanDefinition关系

    接口表示一种能力,实现了一个接口,即拥有一种能力. BeanDefinition与Bean的关系, 就好比类与对象的关系. 类在spring的数据结构就是BeanDefinition.根据BeanDe ...

  5. kotlin系列文章 --- 2.基本语法

    函数 函数定义使用fun关键字,参数格式为:参数:类型,需要声明返回类型 fun sum(a:Int, b:Int): Int{ return a+b } 表达式作为函数体,返回值类型自动推断 fun ...

  6. Scala 学习笔记之集合(1)

    package com.citi.scala object CollectionDemo { def main(args: Array[String]): Unit = { /** * List */ ...

  7. C#使用GUID作为随机数种子

    使用C#默认的Random无参构造的next生成的随机数,在快速生成随机数的时候,会出现大批量的重复.使用guid作为随机数种子,效果会好很多 Guid temp = Guid.NewGuid(); ...

  8. Spring Cloud Feign 总结问题,注意点,性能调优,切换okhttp3

    ### Feign常见问题总结 **FeignClient接口如使用`@PathVariable` ,必须指定value属性** ```java //在一些早期版本中, @PathVariable(& ...

  9. 聊聊 Vue 中 axios 的封装

    聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在 ...

  10. Java表达式计算转型规则

    本题答案应为:B.C.D ------------知识点------------ Java表达式转型规则由低到高转换(例如int 到 double): 1.所有的byte,short,char型的值将 ...