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读取文本中数据并转化为DataFrame的实例
Apr 10 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
Python登录注册验证功能实现
Jun 18 Python
Python中反射和描述器总结
Sep 23 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
python+playwright微软自动化工具的使用
Feb 02 Python
python time.strptime格式化实例详解
Feb 03 Python
教你怎么用Python实现多路径迷宫
Apr 29 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
php 文件缓存函数
2011/10/08 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
介绍一下Ruby的特点
2013/01/20 面试题
2014司机年终工作总结
2014/12/05 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
浅谈Python中对象是如何被调用的
2022/04/06 Python