#-------------------------------------------------------------------------------
# Name: 模块1
# Purpose: 本文通过xml.dom.minidom创建一个xml文档,然后再解析出来,用以熟悉相关接口方法的使用。
#
# Author: User
#
# Created: 31/08/2012
# Copyright: (c) User 2012
# Licence: <your licence>
#-------------------------------------------------------------------------------
from xml.dom import minidom, Node
class BooksXmlGenerator:
def __init__(self):
self.__doc =minidom.Document()
self.__doc.appendChild(self.__doc.createComment("This is a sample xml")) #生产:<!--简单的xml-->
self.__books = self.__doc.createElement("books")
self.__doc.appendChild(books)
self.__booksSource =[]
def SetBooksSource(self, booksSource):
for source in booksSource:
self.__booksSource.append(source)
def GenerateBooksXml(self):
for newBook in self.__booksSource:
book = self.__doc.createElement("book")
book.setAttribute("id", newBook["id"])
title = self.__doc.createElement("title")
title.appendChild(self.__doc.createTextNode(newBook["title"]))
book.appendChild(title)
author = self.__doc.createElement("author")
name = self.__doc.createElement("name")
firstName = self.__doc.createElement("firstname")
firstName.appendChild(self.__doc.createTextNode(newBook["firstname"]))
lastName = self.__doc.createElement("lastname")
lastName.appendChild(self.__doc.createTextNode(newBook["lastname"]))
name.appendChild(firstName)
name.appendChild(lastName)
author.appendChild(name)
book.appendChild(author)
pubdate = self.__doc.createElement("pubdate")
pubdate.appendChild(self.__doc.createTextNode(newBook["pubdate"]))
book.appendChild(pubdate)
self.__books.appendChild(book)
def WriteToFile(self, path):
f = file(path,"w")
self.__doc.writexml(f)
f.close()
class BooksXmlScanner:
def __init__(self, path):
self.__doc = minidom.parse(path)
for child in self.__doc.childNodes:
if child.nodeType ==Node.COMMENT_NODE:
print "Conment : " , child.nodeValue
if child.nodeType == Node.ELEMENT_NODE:
self.__HandleBooks(child)
def __HandleBooks(self, node):
for child in node.childNodes:
if child.nodeType == Node.ELEMENT_NODE and child.tagName =="book":
bookid = child.getAttribute("id")
print "*"*20
print "Book id : " , bookid
self.__HandleBook(child)
def __HandleBook(self, node):
for child in node.childNodes:
if child.nodeType ==Node.ELEMENT_NODE:
if child.tagName == "title":
print "Title : " , self.__GetText(child.firstChild)
if child.tagName == "author":
self.__HandleAuthor(child)
if child.tagName == "pubdate":
print "Pubdate : " , self.__GetText(child.firstChild)
def __GetText(self, node):
if node.nodeType ==Node.TEXT_NODE:
return node.nodeValue
else:
return ""
def __HandleAuthor(self,node):
author = node.firstChild
for child in author.childNodes:
if child.nodeType == Node.ELEMENT_NODE:
if child.tagName == "firstname" :
print "Firstname : ", self.__GetText(child.firstChild)
if child.tagName == "lastname" :
print "Lastname : " , self.__GetText(child.firstChild)
def main():
path ="D:\\books.xml"
booksGenerator = BooksXmlGenerator()
sourceList =[{"id":"1002","title":"Love","firstname":"Mike","lastname":"Li","pubdate":"2012-1-10"},{"id":"1004","title":"Harry Potter","firstname":"Peter","lastname":"Chen","pubdate":"2012-11-11"},{"id":"1003","title":"Steve.Jobs","firstname":"Tom","lastname":"Wang","pubdate":"2012-1-19"}]
booksGenerator.SetBooksSource(sourceList)
booksGenerator.GenerateBooksXml()
booksGenerator.WriteToFile(path)
print "Write to file completely."
booksXmlScanner = BooksXmlScanner(path)
if __name__ == '__main__':
main()
#generated xml
#<?xml version="1.0" ?>
#<!--This is a simple xml.-->
#<books>
# <book id="1001">
# <title>
# An apple
# </title>
# <author>
# <name>
# <firstname>
# Peter
# </firstname>
# <lastname>
# Zhang
# </lastname>
# </name>
# </author>
# <pubdate>
# 2012-1-12
# </pubdate>
# </book>
#
# .................
#</books>