XML是一种被广泛使用的标记语言,它可以被用来表示各种不同类型的数据。在Python中,我们可以使用xmltodict库来将XML文档转换为Python字典。本教程将带您逐步学习如何使用xmltodict库。
安装
您可以使用pip来安装xmltodict库:
pip install xmltodict
基本用法
让我们从一个简单的XML文档开始,例如:
<book>
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
现在,我们可以使用xmltodict库将其转换为Python字典:
import xmltodict
xml_string = '''
<book>
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
'''
book_dict = xmltodict.parse(xml_string)
print(book_dict)
输出:
{
'book': {
'title': 'Python Programming',
'author': 'John Smith',
'publisher': 'Packt Publishing',
'year': '2018'
}
}
处理XML属性
XML元素可以包含属性。例如:
<book id="001">
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
要将XML属性转换为Python字典中的键值对,可以使用attr_prefix和dict_attribs参数:
import xmltodict
xml_string = '''
<book id="001">
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
'''
book_dict = xmltodict.parse(xml_string, attr_prefix='', dict_attribs=True)
print(book_dict)
输出:
{
'book': {
'@id': '001',
'title': 'Python Programming',
'author': 'John Smith',
'publisher': 'Packt Publishing',
'year': '2018'
}
}
处理XML列表
XML元素也可以包含列表。例如:
<books>
<book>
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
<book>
<title>Java Programming</title>
<author>Jane Doe</author>
<publisher>O'Reilly Media</publisher>
<year>2019</year>
</book>
</books>
要将XML列表转换为Python列表,可以使用force_list参数:
import xmltodict
xml_string = '''
<books>
<book>
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
<book>
<title>Java Programming</title>
<author>Jane Doe</author>
<publisher>O'Reilly Media</publisher>
<year>2019</year>
</book>
</books>
'''
books_dict = xmltodict.parse(xml_string, force_list=('book',))
print(books_dict)
输出:
{
'books': {
'book': [
{
'title': 'Python Programming',
'author': 'John Smith',
'publisher': 'Packt Publishing',
'year': '2018'
},
{
'title': 'Java Programming',
'author': 'Jane Doe',
'publisher': "O'Reilly Media",
'year': '2019'
}
]
}
}
处理XML命名空间
XML文档可能包含命名空间。例如:
<root xmlns:foo="http://example.com/foo">
<foo:bar>hello world</foo:bar>
</root>
要处理XML命名空间,可以使用process_namespaces参数:
import xmltodict
xml_string = '''
<root xmlns:foo="http://example.com/foo">
<foo:bar>hello world</foo:bar>
</root>
'''
root_dict = xmltodict.parse(xml_string, process_namespaces=True)
print(root_dict)
输出:
{
'root': {
'http://example.com/foo:bar': 'hello world'
}
}
将Python字典转换为XML
您可以使用unparse()方法将Python字典转换回XML:
import xmltodict
book_dict = {
'book': {
'title': 'Python Programming',
'author': 'John Smith',
'publisher': 'Packt Publishing',
'year': '2018'
}
}
xml_string = xmltodict.unparse(book_dict, pretty=True)
print(xml_string)
输出:
<book>
<title>Python Programming</title>
<author>John Smith</author>
<publisher>Packt Publishing</publisher>
<year>2018</year>
</book>
总结
在本教程中,您已经学习了如何使用xmltodict库将XML文档转换为Python字典,并将Python字典转换回XML文档。您还学习了如何处理XML属性、XML列表和XML命名空间。希望这篇教程对您有所帮助!