zoukankan      html  css  js  c++  java
  • 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('
    , '')
             #这里的文本需要特殊处理一下,会有多余的
    
             print u'	文本:', text
          else:
             #输出节点名
             print '	' + node.nodeName
    
             #输出属性值,这里可以用getAttribute方法获取
             #也可以遍历得到,这是一个字典
    
             for attr,attr_val in node.attributes.items():
                print '		', attr,':'jattr_val
    
        print ''
    
    if __name__ == '__main__':
        read_xml_test('test.xml')
        raw_input('ok')
  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/zidonghua/p/7436488.html
Copyright © 2011-2022 走看看