from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
def main():
BOOKs = {
'001': {
'title' : 'Name1',
'edition' : 2,
'year' : 2006,
},
'002': {
'title' : 'Name2',
'year' : 2009,
},
}
books = Element('books')
for isbn, info in BOOKs.items(): #此处若用python2,则改为iteritems()
book = SubElement(books, 'book')
info.setdefault('authors', '无缘浪子党')
info.setdefault('edition',1)
for key, val in info.items():
SubElement(book, key).text = ', '.join(str(val).split(':'))
#此处是脚本正式开始工作的地方,首先创建顶层对象,即books,接着将所有其他内容添加到该节点下,#对于每一本书,都添加一个book子节点,如果上面的原字典没有提供作者和版本,则使用提供的默认值。接着#遍历所有键值对,将这些内容作为其他子节点添加到每个book中。
xml = tostring(books)
print('*** RAW XML ***')
print(xml)
print('\n*** PRETTY-PRINTED XML')
dom = parseString(xml)
print(dom.toprettyxml(' '))
print('***FLAT STRUCTURE')
for elmt in books.iter(): #此处若为Python2,则改为getiterator()
print(elmt.tag, '-', elmt.text)
print('\n*** TITLES ONLY ***')
for book in books.findall('.//title'):
print(book.text)
if name == 'main':
main()