python 解析xml格式_Python解析XML文件
1.概述
Python有三種方法解析XML:SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
python 標(biāo)準(zhǔn)庫包含SAX解析器,SAX用事件驅(qū)動(dòng)模型,通過在解析XML的過程中觸發(fā)一個(gè)個(gè)的事件并調(diào)用用戶定義的回調(diào)函數(shù)來處理XML文件。
2.DOM(Document Object Model)
將XML數(shù)據(jù)在內(nèi)存中解析成一個(gè)樹,通過對(duì)樹的操作來操作XML。
3.ElementTree(元素樹)
ElementTree就像一個(gè)輕量級(jí)的DOM,具有方便友好的API。代碼可用性好,速度快,消耗內(nèi)存少。
DOM需要將XML數(shù)據(jù)映射到內(nèi)存中的樹,一是比較慢,二是比較耗內(nèi)存; 而SAX流式讀取XML文件,比較快,占用內(nèi)存少,但需要用戶實(shí)現(xiàn)回調(diào)函數(shù)(handler)
綜上:
如果XML文件很大,那么建議SAX,否則可以考慮DOM(DOM代碼會(huì)簡(jiǎn)單一些)
2.利用Python解析自動(dòng)化測(cè)試中的Paramter Xml文件
2.1 Paramter Xml文件
在我們的自動(dòng)化測(cè)試系統(tǒng)中,對(duì)于同一個(gè)自動(dòng)化Case,需要測(cè)試不同的場(chǎng)景,一種場(chǎng)景就是一個(gè)Test Case;
所以每個(gè)自動(dòng)化Case會(huì)有一個(gè)Paramter Xml文件,里面包括了一系列的場(chǎng)景,如果后期有新的場(chǎng)景需要測(cè)試,測(cè)試人員只需修改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解析自動(dòng)化測(cè)試中的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,把每個(gè)TestCase的parameters保存在一個(gè)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解析自動(dòng)化測(cè)試中的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")
總結(jié)
以上是生活随笔為你收集整理的python 解析xml格式_Python解析XML文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python123期末测试第十周答案_P
- 下一篇: python3.7.2怎么安装和管理扩展