Python中xml和dict格式转换的示例代码


Posted in Python onNovember 07, 2019

在做接口自动化的时候,请求数据之前都是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 相关文章推荐
python计数排序和基数排序算法实例
Apr 25 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python中逗号的三种作用实例分析
Jun 08 Python
python版本单链表实现代码
Sep 28 Python
Java文件与类动手动脑实例详解
Nov 10 Python
pycharm运行scrapy过程图解
Nov 22 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
TensorFlow 显存使用机制详解
Feb 03 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
python对象转字典的两种实现方式示例
Nov 07 #Python
python多线程高级锁condition简单用法示例
Nov 07 #Python
python文件操作的简单方法总结
Nov 07 #Python
详解Django admin高级用法
Nov 06 #Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 #Python
Python实现socket非阻塞通讯功能示例
Nov 06 #Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 #Python
You might like
PHP经典的给图片加水印程序
2006/12/06 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php动态函数调用方法
2015/05/21 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
javascript中new关键字详解
2015/12/14 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
毕业生物理教师求职信
2013/10/17 职场文书
电子商务专业学生的学习自我评价
2013/10/27 职场文书
大学生就业策划书范文
2014/04/04 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
与死神共舞观后感
2015/06/15 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python