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

所属分类: 脚本专栏 / python 阅读数: 1922
收藏 0 赞 0 分享

在做接口自动化的时候,请求数据之前都是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常见加密模块用法分析【MD5,sha,crypt模块】

这篇文章主要介绍了Python常见加密模块用法,结合实例形式较为详细的分析了MD5,sha与crypt模块加密的相关实现方法与操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python向日志输出中添加上下文信息

这篇文章主要介绍了Python向日志输出中添加上下文信息的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现的简单dns查询功能示例

这篇文章主要介绍了Python实现的简单dns查询功能,结合实例形式分析了Python基于socket模块的dns信息查询实现技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

利用Anaconda完美解决Python 2与python 3的共存问题

Anaconda 是 Python 的一个发行版,如果把 Python 比作 Linux,那么 Anancoda 就是 CentOS 或者 Ubuntu,下面这篇文章主要给大家介绍了利用Anaconda完美解决Python 2与python 3共存问题的相关资料,文中介绍的非常详
收藏 0 赞 0 分享

Python随机读取文件实现实例

这篇文章主要介绍了Python随机读取文件的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

用生成器来改写直接返回列表的函数方法

下面小编就为大家带来一篇用生成器来改写直接返回列表的函数方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python爬虫入门教程--快速理解HTTP协议(一)

http协议是互联网里面最重要,最基础的协议之一,我们的爬虫需要经常和http协议打交道。下面这篇文章主要给大家介绍了关于python爬虫入门之快速理解HTTP协议的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

老生常谈Python进阶之装饰器

下面小编就为大家带来一篇老生常谈Python进阶之装饰器。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈Python基础之I/O模型

下面小编就为大家带来一篇浅谈Python基础之I/O模型。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python如何获取服务器硬件信息

这篇文章主要为大家详细介绍了python获取服务器硬件信息的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多