ubuntu,debian,redhat,fedora,centos
« »
2008-10-17Python

147

用Python读写XML文件 分享

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

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

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

  1. from xml.etree.ElementTree import ElementTree
  2. from xml.etree.ElementTree import Element
  3. from xml.etree.ElementTree import SubElement
  4. from xml.etree.ElementTree import dump
  5. from xml.etree.ElementTree import Comment
  6. from xml.etree.ElementTree import tostring
  7.  
  8. '''
  9. <?xml version="1.0"?>
  10. <PurchaseOrder>
  11.   <account refnum="2390094"/>
  12.   <item sku="33-993933" qty="4">
  13.     <name>Potato Smasher</name>
  14.     <description>Smash Potatoes like never before.</description>
  15.   </item>
  16. </PurchaseOrder>
  17. '''
  18.  
  19. ## Writing the content to xml document
  20. book = ElementTree()
  21.  
  22. purchaseorder = Element('PurchaseOrder')
  23. book._setroot(purchaseorder)
  24.  
  25. SubElement(purchaseorder'account', {'refnum' : "2390094"})
  26.  
  27. item = Element("item", {'sku' : '33-993933', 'qty' : '4'})
  28. purchaseorder.append(item)
  29. print item.items()       # [('sku', '33-993933'), ('qty', '4')]
  30. print item.attrib        # {'sku': '33-993933', 'qty': '4'}
  31. print item.get('sku')    # 33-993933
  32. SubElement(item, 'name').text = "Potato Smasher"
  33. SubElement(item, 'description').text = "Smash Potatoes like never before."
  34.  
  35. #book.write('book.xml',"utf-8")
  36.  
  37. #print tostring(purchaseorder)
  38.  
  39. #import sys
  40. #book.write(sys.stdout)
  41.  
  42. #dump(book)
  43.  
  44. ## Displaying the content of the xml document
  45. print purchaseorder.find('account')
  46. print purchaseorder.find('account').get('refnum')
  47. print purchaseorder.findall('account')[0].get('refnum')
  48.  
  49. print purchaseorder.find('item/name')
  50. print purchaseorder.find('item/name').text
  51.  
  52. ## How to use ElementTree([element,] [file])
  53. ## 1. From standard XML element, it becomes to root element
  54. print ElementTree(item).getroot().find('name').text
  55. ## 2. From XML file
  56. print ElementTree(file='book.xml').getroot().find('item/description').text
  57.  
  58.  
  59. ## Create an iterator
  60. for element in purchaseorder.getiterator():
  61.     print element.tag
  62.  
  63.  
  64. ## Get pretty look
  65. def indent(elem, level=0):
  66.     i = "\n" + level*"  "
  67.     if len(elem):
  68.         if not elem.text or not elem.text.strip():
  69.             elem.text = i + "  "
  70.         for e in elem:
  71.             indent(e, level+1)
  72.         if not e.tail or not e.tail.strip():
  73.             e.tail = i
  74.     if level and (not elem.tail or not elem.tail.strip()):
  75.         elem.tail = i
  76.     return elem
  77.  
  78. if __name__=="__main__":
  79.     dump(indent(purchaseorder))
  80.     book.write('book.xml',"utf-8")

您还可能感兴趣的内容

日志信息 »

该日志于2008-10-17 17:31由 admin 发表在Python分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

没有评论

发表评论 »

返回顶部