Python——数据存储:XML操作

  XML文件已被广泛使用在各种应用中,如Web、移动APP、桌面GUI应用等等,几乎都会有XML文件的身影。不过现在一般不会将大部分的应用数据用xml文件存储,但至少会使用XML文件保存一些配置信息。在Python中,需要导入XML模块或其子模块,并利用提供的API来操作XML文件。如,xml.etree.ElementTree模块,通过该模块的parse函数读取XML文件。
由于下面XML操作都需要用到XML文件,文件如下:
persons.xml文件的内容:

<?xml version="1.0" ?>
<persons>
    <item type="int">20</item>
<item type="str">names</item>
<item type="dict" uuid="123">
<salary type="int">2000</salary>
<age type="int">30</age>
<name type="str">Gell</name>
</item>
<item type="dict" uuid="45">
<salary type="int">3000</salary>
<age type="int">40</age>
<name type="str">Chen</name>
</item>
<item type="dict" uuid="167">
<salary type="int">4000</salary>
<age type="int">50</age>
<name type="str">Ling</name>
</item>
</persons>
以下介绍python语言对XML文件的具体操作。


一、读取与检索XML文件
from xml.etree.ElementTree import parse

doc = parse('./files/persons.xml')
for item in doc.iterfind('item'):
# 读取id节点的值
salary = item.findtext('salary')
# 读取name节点的值
age = item.findtext('age')
# 读取price节点的值
name = item.findtext('name')

type = item.get('type')
uuid = item.get('uuid')
print('type={}'.format(type))
print('uuid={}'.format(uuid))
print('salary={}'.format(salary))
print('age', '=', age)
print('name', '=', name)
print('-----------------')

二、字典转成XML字符串
import dicttoxml
from xml.dom.minidom import parseString
import os

d = [20,'names',
{'name':'Gell','age':30,'salary':2000},
{'name':'Chen','age':40,'salary':3000},
{'name':'Ling','age':50,'salary':4000}
]
bxml = dicttoxml.dicttoxml(d,custom_root='persons')
xml = bxml.decode('utf-8')
print(xml)
print('----------------------')
dom = parseString(xml)
prettyxml = dom.toprettyxml(indent=' ')
print(prettyxml)

#将XML字符串保存到文件中。
os.makedirs('files',exist_ok=True)
f=open('files/persons.xml','w',encoding='utf-8')
f.write(prettyxml)
f.close()

三、XML字符串转为python字典
import xmltodict
import pprint

f=open('./files/persons.xml','rt',encoding='utf-8')
xml = f.read()
d=xmltodict.parse(xml)
print(d)
f.close()

pp = pprint.PrettyPrinter(indent=0)
pp.pprint(d)
 

参考文献:
1、《python从菜鸟到高手》,作者:李宁
原文地址:https://www.cnblogs.com/chenhaiming/p/9881819.html