用Python读写XML文件,Python读写XML文件,以前用Python中的m


以前用Python中的minidom写过生成XML文件的程序,现在需要读取XML文件中的内容了,首先想到的还是minidom模块.一番编写测试后,如愿掌握了其函数的使用方式.

以前就知道elementtree在处理XML文件时广受Python程序员的欢迎,也安装过elementtree的安装包,现在使用的 Python2.5中已将其收录了.既然我要处理XML文件,当然也要学着使用更高效和易用的模块了.自己摸索了半天,除了有关名字空间的函数没有试用外,其它函数都试用过了.以后处理XML文件可以得心应手了。

下面是一个简单的例子,通过它可以知道各个函数的使用方法:

from xml.etree.ElementTree import ElementTreefrom xml.etree.ElementTree import Elementfrom xml.etree.ElementTree import SubElementfrom xml.etree.ElementTree import dumpfrom xml.etree.ElementTree import Commentfrom 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 documentbook = 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-993933SubElement(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 documentprint 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 elementprint ElementTree(item).getroot().find('name').text## 2. From XML fileprint ElementTree(file='book.xml').getroot().find('item/description').text## Create an iteratorfor element in purchaseorder.getiterator():    print element.tag## Get pretty lookdef 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 elemif __name__=="__main__":    dump(indent(purchaseorder))    book.write('book.xml',"utf-8")

评论关闭