python+selenium自动化软件测试(第12章):Python读写XML文档
XML 即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言。
xml 有如下特征: 首先,它是有标签对组成:<aa></aa> 标签可以有属性: <aa id=’123’></aa> 标签对可以嵌入数据: <aa>abc</aa>
Python对XML文档读写常用有几个模块:
(1) xml.etree.ElementTree
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
(2)xml.dom.*
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
(3)xml.sax.*
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
写入XML文档
#coding:utf-8 from xml.dom import minidom #写入xml文档的方法 def create_xml_test(filename): #新建xml文档对象 xml=minidom.Document() #创建第一个节点,第一个节点就是根节点了 root=xml.cneateElement('root') #写入属性(xmlns:xsi是命名空间,同样还可以写入xsi: schemaLocation 指定 xsd 文件) root.setAttribute('xmlns:xsi','http://www.xxx.com') #创建节点后,还需要添加到文档中才有效 xml.appendchild(root) #一般根节点是很少写文本内容,那么给根节点再创建一个子节点 text_node=xml.createElement('element') text_node.setAttribute('id','id1') root.appendChild(text_node) #给这个节点加入文本,文本也是一种节点 text=xml.cneateTextNode('hello world') text_node.appendchild(text) #一个节点加了文本之后,还可以继续追加其他东西 tag=xml.createElement('tag') tag.setAttribute('data', 'tag data') text_node.appendchild(tag) #写好之后,就需要保存文档了 f=open(filename,'w') f.write(xml.toprettyxml(encodings'utf-8')) f.close() if __name__ == '__main__': #在当前目录下,创建1. xml create_xml_test('1.xml')
就会在本地生成一份xml的文档
读取XML文档
#coding:utf-8 from xml.dom import minidom #读取xml文档的方法 def read_xml_test(filename): #打开这个文档,用parse方法解析 xml = minidom.parse(filename) #获取根节点 root = xml.documentElement #得到根节点下面所有的element节点 #更多方法可以参考以w3school的内容或者用dir(root)获取 elements = root.getElementsByTagName('element') #遍历处理,elements是一个列表 for element in elements: #判断是否有id属性 if element.hasAttribute('id'): #不加上面的判断也可以,若找不到属性,则返回空 print 'id:, element.getAttribute('id') #遍历element的子节点 for node in element.childNodes: #通过nodeMame判断是否是文本 if node.nodeName = = '#text': #用data属性获取文本内容 text = node.data.replace('\n, '') #这里的文本需要特殊处理一下,会有多余的\n print u'\t文本:', text else: #输出节点名 print '\t' + node.nodeName #输出属性值,这里可以用getAttribute方法获取 #也可以遍历得到,这是一个字典 for attr,attr_val in node.attributes.items(): print '\t\t', attr,':'jattr_val print '' if __name__ == '__main__': read_xml_test('test.xml') raw_input('ok')