Python中xml和dict格式轉換

  • 2019 年 11 月 7 日
  • 筆記

在做介面自動化的時候,請求數據之前都是JSON格式的,Python有自帶的包來解決。最近在做APP的介面,遇到XML格式的請求數據,費了很大勁來解決,解決方式是:介面文檔拿到的是XML,在線轉化為json格式(目的是拿到xml數據的模板),存放到json文件中,根據介面名去提取。

  • github原文介紹:使用XML的Python模組感覺就像您在使用JSON
  • 鏈接:https://github.com/martinblech/xmltodict

    下載xmltodict(pip install xmltodict)

C:Userswy.DESKTOP-KENPKKPDesktopDingdadingAPI>pip  install xmltodict  Requirement already satisfied: xmltodict in c:userswy.desktop-kenpkkpappdatalocalprogramspythonpython36libsite-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