日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python 解析xml格式_Python解析XML文件

發(fā)布時(shí)間:2025/3/19 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 解析xml格式_Python解析XML文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。