• 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')
  • 相关阅读:
    禁止 git 自动转换换行符
    一个单元测试问题的解决
    关于脏读、幻象读、不可重复读的理解
    PKCS7 的 attached 和 detached 方式的数字签名
    关于DES加密中的 DESede/CBC/PKCS5Padding
    解决grep的结果无法显示文件名的问题
    解决64位操作系统下运行psql的问题
    一个用于将sql脚本转换成实体类的js代码
    批量将代码中的 get_XXX 替换成 XXX
    关于数据库中密码的存储
  • 原文地址:https://www.cnblogs.com/zidonghua/p/7436488.html
Copyright © 2020-2023  润新知