標籤:模型 odi text 擷取 span 嵌入 get 事件驅動 replace
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-8from 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-8from 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‘)
python+selenium自動化軟體測試(第12章):Python讀寫XML文檔