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.* node

python 標準庫包含SAX解析器,SAX用事件驅動模型,經過在解析XML的過程當中觸發一個個的事件並調用用戶定義的回調函數來處理XML文件。python


寫入XML文檔app

#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的文檔dom

讀取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')
相關文章
相關標籤/搜索