如何将Python字典转换成XML

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()

此代码用python3.72可以运行,结果如下,

*** RAW XML ***
b'<books><book><title>Name1</title><edition>2</edition><year>2006</year><authors>无缘浪子党</authors></book><book><title>Name2</title><year>2009</year><authors>无缘浪子党</authors><edition>1</edition></book></books>'

*** PRETTY-PRINTED XML
<?xml version="1.0" ?>
<books>
 <book>
  <title>Name1</title>
  <edition>2</edition>
  <year>2006</year>
  <authors>无缘浪子党</authors>
 </book>
 <book>
  <title>Name2</title>
  <year>2009</year>
  <authors>无缘浪子党</authors>
  <edition>1</edition>
 </book>
</books>

***FLAT STRUCTURE
books - None
book - None
title - Name1
edition - 2
year - 2006
authors - 无缘浪子党
book - None
title - Name2
year - 2009
authors - 无缘浪子党
edition - 1

*** TITLES ONLY ***
Name1
Name2

猜你喜欢

转载自blog.csdn.net/guangmingsky/article/details/85873069