用Python读写XML文件 分享
以前用Python中的minidom写过生成XML文件的程序,现在需要读取XML文件中的内容了,首先想到的还是minidom模块.一番编写测试后,如愿掌握了其函数的使用方式.
以前就知道elementtree在处理XML文件时广受Python程序员的欢迎,也安装过elementtree的安装包,现在使用的 Python2.5中已将其收录了.既然我要处理XML文件,当然也要学着使用更高效和易用的模块了.自己摸索了半天,除了有关名字空间的函数没有试用外,其它函数都试用过了.以后处理XML文件可以得心应手了。
下面是一个简单的例子,通过它可以知道各个函数的使用方法:
- from xml.etree.ElementTree import ElementTree
- from xml.etree.ElementTree import Element
- from xml.etree.ElementTree import SubElement
- from xml.etree.ElementTree import dump
- from xml.etree.ElementTree import Comment
- from xml.etree.ElementTree import tostring
- '''
- <?xml version="1.0"?>
- <PurchaseOrder>
- <account refnum="2390094"/>
- <item sku="33-993933" qty="4">
- <name>Potato Smasher</name>
- <description>Smash Potatoes like never before.</description>
- </item>
- </PurchaseOrder>
- '''
- ## Writing the content to xml document
- book = ElementTree()
- purchaseorder = Element('PurchaseOrder')
- book._setroot(purchaseorder)
- SubElement(purchaseorder, 'account', {'refnum' : "2390094"})
- item = Element("item", {'sku' : '33-993933', 'qty' : '4'})
- purchaseorder.append(item)
- print item.items() # [('sku', '33-993933'), ('qty', '4')]
- print item.attrib # {'sku': '33-993933', 'qty': '4'}
- print item.get('sku') # 33-993933
- SubElement(item, 'name').text = "Potato Smasher"
- SubElement(item, 'description').text = "Smash Potatoes like never before."
- #book.write('book.xml',"utf-8")
- #print tostring(purchaseorder)
- #import sys
- #book.write(sys.stdout)
- #dump(book)
- ## Displaying the content of the xml document
- print purchaseorder.find('account')
- print purchaseorder.find('account').get('refnum')
- print purchaseorder.findall('account')[0].get('refnum')
- print purchaseorder.find('item/name')
- print purchaseorder.find('item/name').text
- ## How to use ElementTree([element,] [file])
- ## 1. From standard XML element, it becomes to root element
- print ElementTree(item).getroot().find('name').text
- ## 2. From XML file
- print ElementTree(file='book.xml').getroot().find('item/description').text
- ## Create an iterator
- for element in purchaseorder.getiterator():
- print element.tag
- ## Get pretty look
- def indent(elem, level=0):
- i = "\n" + level*" "
- if len(elem):
- if not elem.text or not elem.text.strip():
- elem.text = i + " "
- for e in elem:
- indent(e, level+1)
- if not e.tail or not e.tail.strip():
- e.tail = i
- if level and (not elem.tail or not elem.tail.strip()):
- elem.tail = i
- return elem
- if __name__=="__main__":
- dump(indent(purchaseorder))
- book.write('book.xml',"utf-8")
没有评论▼