Python:Dom解析XML文件(读XML)

这一篇文章接着前一篇来接续讲解如何使用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.               

        完

声明: 本文采用  BY-NC-SA 协议进行授权. 转载请注明转自: Python:Dom解析XML文件(读XML)

你可能感兴趣的:(python)