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')