python 解析xml格式_Python解析XML文件
1.概述
Python有三種方法解析XML:SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
python 標準庫包含SAX解析器,SAX用事件驅動模型,通過在解析XML的過程中觸發一個個的事件并調用用戶定義的回調函數來處理XML文件。
2.DOM(Document Object Model)
將XML數據在內存中解析成一個樹,通過對樹的操作來操作XML。
3.ElementTree(元素樹)
ElementTree就像一個輕量級的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內存少。
DOM需要將XML數據映射到內存中的樹,一是比較慢,二是比較耗內存; 而SAX流式讀取XML文件,比較快,占用內存少,但需要用戶實現回調函數(handler)
綜上:
如果XML文件很大,那么建議SAX,否則可以考慮DOM(DOM代碼會簡單一些)
2.利用Python解析自動化測試中的Paramter Xml文件
2.1 Paramter Xml文件
在我們的自動化測試系統中,對于同一個自動化Case,需要測試不同的場景,一種場景就是一個Test Case;
所以每個自動化Case會有一個Paramter Xml文件,里面包括了一系列的場景,如果后期有新的場景需要測試,測試人員只需修改Xml文件
Xml文件如下:
case_1_param_1
case_1_param_2
case_1_param_3
case_1_param_4
case_1_param_5
case_1_param_6
case_1_param_7
case_2_param_1
case_2_param_2
case_2_param_3
case_2_param_4
case_2_param_5
case_2_param_6
case_2_param_7
2.2 利用xml.dom解析自動化測試中的Paramter Xml文件
#!/usr/bin/python#-*- coding: UTF-8 -*-
importxml.dom.minidomdefchange_xml_parameter_to_dict(parameterInXml,parameterInDic):
keyname=parameterInXml.tagNameifparameterInXml.hasChildNodes():
keyvalue=parameterInXml.childNodes[0].dataelse:
keyvalue=''parameterInDic[keyname]=keyvaluedefparse_xml_parameter_file(xml_parameter_file):#使用minidom解析器打開 XML 文檔
DOMTree =xml.dom.minidom.parse(xml_parameter_file)
collection=DOMTree.documentElement#解析xml,把每個TestCase的parameters保存在一個dictionary中,并且以list的方式返回所有的dictionary
para_for_all_tcs=[]
all_tcs_in_xml= collection.getElementsByTagName("Testcase")for one_tc_in_xml inall_tcs_in_xml:
para_for_one_tc={}
para_for_one_tc['CASE_NAME']=one_tc_in_xml.getAttribute('casename')for parameter inone_tc_in_xml.childNodes:if parameter.nodeType == 1:
change_xml_parameter_to_dict(parameter,para_for_one_tc)else:continuepara_for_all_tcs.append(para_for_one_tc)returnpara_for_all_tcsif __name__=='__main__':
para_for_all_tcs= parse_xml_parameter_file(r"testData\simple_paramter_file.xml")print para_for_all_tcs
2.3 利用xml.sax解析自動化測試中的Paramter Xml文件
importxml.saxclassParameterFileHandle(xml.sax.ContentHandler):def __init__(self):
self.para_for_all_tcs=[]
self.para_for_one_tc={}
self.element_tag= ""self.element_data= ""
defstartElement(self,name,attrs):
self.element_tag=nameif self.element_tag == "TestCase":
self.para_for_one_tc['CASE_NAME']=attrs['casename']defendElement(self,name):
self.element_tag=nameif self.element_tag == "Testcase":
self.para_for_all_tcs.append(self.para_for_one_tc)
self.para_for_one_tc={}else:
self.para_for_one_tc[self.element_tag]=self.element_datadefcharacters(self,content):if self.element_tag != "Testcase":
self.element_data=contentdefparse_xml_parameter_file(xml_file):
parser=xml.sax.make_parser()
xml_handle=ParameterFileHandle()
parser.setContentHandler(xml_handle)
parser.parse(xml_file)printxml_handle.para_for_all_tcsif __name__=='__main__':
parse_xml_parameter_file(r"testData\simple_paramter_file.xml")
總結
以上是生活随笔為你收集整理的python 解析xml格式_Python解析XML文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python123期末测试第十周答案_P
- 下一篇: python3.7.2怎么安装和管理扩展