Python中xml和dict格式转换

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

  • github原文介绍:使用XML的Python模块感受就像您在使用JSON
  • 连接:https://github.com/martinblech/xmltodictgit

    下载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,转化后的结果为github

{
  "mydocument": {
    "-has": "an attribute",    #在这里要留意一个事情,XML是有节点的,节点有属性,json数据的键以前有-的,就是属性,可是xmltodict识别的属性是@,因此要把-替换为@(就是这里找了很久)
    "and": {
      "many": [
        "elements",
        "more elements"
      ]
    },
    "plus": {
      "-a": "complex",
      "#text": "
        element as well
    "
    }
  }
}

示例代码json

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模块就能够完成,可是在自动化测试框架中这样使用比较麻烦,并且复用性很差,封装好以下app

#-*- 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
相关文章
相关标签/搜索