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")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值