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
相關文章
相關標籤/搜索