这一篇文章接着前一篇来接续讲解如何使用Dom方式操作XML数据,这一篇文章主要介绍如何解析(parse)XML文件,本文实例XML文件是上一篇的生成的文件,我们看看能不能完整的读出来,这个XML文件内容如下:

XML/HTML代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <book_store name="new hua" website="http://www.ourunix.org">
  3. <book>
  4. <name>Hamlet</name>
  5. <author>William Shakespeare</author>
  6. <price>$20</price>
  7. <grade>good</grade>
  8. </book>
  9. <book>
  10. <name>shuihu</name>
  11. <author>naian shi</author>
  12. <price>$200</price>
  13. <grade>good</grade>
  14. </book>
  15. </book_store>

主要方法

        1、加载读取XML文件

Python代码

  1. minidom.parse(filename) 

        2、获取XML文档对象

Python代码

  1. doc.documentElement 

        3、 获取XML节点属性值

Python代码

  1. node.getAttribute(AttributeName) 

        4、获取XML节点对象集合

Python代码

  1. node.getElementsByTagName(TagName) 

        5、 获取XML节点值

Python代码

  1. node.childNodes[index].nodeValue 

代码演示

        同样先用一个简单版本来演示下如何使用Dom解析XML文件,代码如下:

Python代码

  1. '''''
  2. Created on 2012-8-28
  3.  
  4. @author:  walfred
  5. @module: domxml.parseXMLSimple
  6. @description:
  7. '''
  8. import xml.dom.minidom as Dom 
  9. import sys 
  10.  
  11. if __name__ == "__main__": 
  12. try: 
  13.         xml_file = Dom.parse("./book_store.xml") 
  14. except Exception, e: 
  15. print e 
  16.         sys.exit() 
  17.     node_root = xml_file.documentElement 
  18.     name = node_root.getAttribute("name") 
  19.     website = node_root.getAttribute("website") 
  20. print "name of book store: %s\nwebsite of book store: %s" %(name, website) 
  21.  
  22.     node_book_list = node_root.getElementsByTagName("book") 
  23. for book_node in node_book_list: 
  24.         book_name_node = book_node.getElementsByTagName("name")[0] 
  25.         book_name_value = book_name_node.childNodes[0].data 
  26.  
  27.         book_author_node = book_node.getElementsByTagName("author")[0] 
  28.         book_author_value = book_author_node.childNodes[0].data 
  29.  
  30.         book_price_node = book_node.getElementsByTagName("price")[0] 
  31.         book_price_value = book_price_node.childNodes[0].data 
  32.  
  33.         book_grade_node = book_node.getElementsByTagName("grade")[0] 
  34.         book_grade_value = book_grade_node.childNodes[0].data 
  35.  
  36. print "book: %s\t author: %s\t price: %s\t grade: %s\t" %(book_name_value, book_author_value, book_price_value, book_grade_value) 

        运行结果如下:

name of book store: new hua

website of book store: http://www.ourunix.org

book: Hamlet author: William Shakespeare price: $20 grade: good

book: shuihu author: naian shi price: $200 grade: good

        同样接着来一个所谓的高级版本:

XML/HTML代码

  1. '''  
  2. Created on 2012-8-28  
  3.  
  4. @author:  walfred 
  5. @module: domxml.XMLParser  
  6. @description: 
  7. '''   
  8.  
  9. import xml.dom.minidom as Dom 
  10. import sys 
  11.  
  12. class XMLParser: 
  13.     def __init__(self, xml_file_path): 
  14.         try: 
  15. self.xml = Dom.parse(xml_file_path) 
  16.         except: 
  17.             sys.exit() 
  18. self.book_list = list() 
  19.  
  20.     def getNodeName(self, prev_node, node_name): 
  21.         return prev_node.getElementsByTagName(node_name) 
  22.  
  23.     def getNodeAttr(self, node, att_name): 
  24.         return node.getAttribute(att_name) 
  25.  
  26.     def getNodeValue(self, node): 
  27.         return node.childNodes[0].data.encode("utf-8") 
  28.  
  29.     def parse(self): 
  30. node_root = self.xml.documentElement 
  31.         print "store: %s, website: %s" %(self.getNodeAttr(node_root, "name"), \ 
  32.                                      self.getNodeAttr(node_root, "website")) 
  33.  
  34. node_book_list = self.getNodeName(node_root, "book") 
  35.  
  36.         for node_book in node_book_list: 
  37. book_info = dict() 
  38. node_book_name = self.getNodeName(node_book, "name")[0] 
  39. book_name_value = self.getNodeValue(node_book_name) 
  40.             book_info["name"] = book_name_value 
  41.  
  42. node_book_author = self.getNodeName(node_book, "author")[0] 
  43. book_author_value = self.getNodeValue(node_book_author) 
  44.             book_info["author"] = book_author_value 
  45.  
  46. node_book_price = self.getNodeName(node_book, "price")[0] 
  47. book_price_value = self.getNodeValue(node_book_price) 
  48.             book_info["price"] = book_price_value 
  49.  
  50. node_book_grade = self.getNodeName(node_book, "grade")[0] 
  51. book_garde_value = self.getNodeValue(node_book_grade) 
  52.             book_info["grade"] = book_garde_value 
  53.  
  54.             self.book_list.append(book_info) 
  55.  
  56.     def getBookList(self): 
  57.         return self.book_list 
  58.  
  59. if __name__ == "__main__": 
  60. myXMLParser = XMLParser("book_store.xml") 
  61.     myXMLParser.parse() 
  62.     print myXMLParser.getBookList() 
  63.  

        完