xml 是现在程序中用到的比较重用的一种数据格式,可以用于不同程序或语言之间的数据交换,python当然也不例外,通过xml模块就可以轻松实现xml文件的读写操作
1.生成一个xml文件
from xml.etree import ElementTree as ET
root = ET.Element("game-user")
user1 = ET.SubElement(root, "user", attrib={"key": "xmcx"})
name1 = ET.SubElement(user1, "name")
alias1 = ET.SubElement(user1, "alias")
blood1 = ET.SubElement(user1, "blood")
sword1 = ET.SubElement(user1, "sword")
introduct1 = ET.SubElement(user1, "introduce")
kongfu = ET.SubElement(user1,"kongfu")
name1.text = "西门吹雪"
alias1.text = "剑神"
blood1.text = "200"
sword1.text = "乌鞘剑"
kongfu.text = '{"雪染长虹":15, "剑神一笑":30 ,"冰雪交加":20, "雪满天下": 25 }'
introduct1.text = "西门吹雪以剑法超绝立足江湖,生性冷僻"
xmlfile = ET.ElementTree(root)
xmlfile.write("users.xml", encoding="utf-8", xml_declaration=True)
创建完的xml格式如下
<?xml version='1.0' encoding='utf-8'?>
<game-user>
<user key="xmcx">
<name>西门吹雪</name>
<alias>剑神</alias>
<blood>200</blood>
<sword>乌鞘剑</sword>
<introduce>西门吹雪以剑法超绝立足江湖,生性冷僻"</introduce>
<kongfu>{"雪染长虹":15, "剑神一笑":30 ,"冰雪交加":20, "雪满天下": 25 }</kongfu>
</user>
</game-user>
2. 解析 xml 文件(读取文件)
我们可以通过for循环来遍历根节点及子节点下的所有元素,如:
# 加载 xml 配置文件
f = ET.parse("users.xml")
# 获取根节点
root = f.getroot()
print("[root]:", root)
# 获取根节点下的子节点 tag == key,
for child in root:
print("[root下的节点] tag:{0}, attrib:{1}".format(child.tag, child.attrib))
# 获取每个子节店的所有属性及值 tag==key, text==value
for elements in child:
print("[Element元素] -- > {0}:{1}".format(elements.tag, elements.text))
另一种通过findall方法获取根节点下的所有子节点
import xml.etree.ElementTree as xml_et
f = xml_et.parse("users.xml")
root = f.getroot()
# 查找根节点下的 所有 user 节点
for users in root.findall('user'):
# 获得user的attrib值
print("attrib:", users.attrib)
# 获得 user 的attrib属性中key对应的值
print("attrib['key']:", users.get('key'))
# 获取 user 下的元素属性为 name 的值
print("<name>:", users.find('name').text)
result:
attrib: {'key': 'xmcx'}
attrib['key']: xmcx
<name>: 西门吹雪
3 修改 xml 文件
import xml.etree.ElementTree as xml_et
f = xml_et.parse("users.xml")
root = f.getroot()
# 查找根节点下的 所有 user 节点
for users in root.findall('user'):
# 获取 user 节点中 属性 key:value 的 value 值
user = users.get('key')
if user == "xmcx":
# 获取元素中 name 元素
name = users.find('name')
# 修改name元素的值
name.text = "修改name的值"
f.write("users.xml", encoding="utf-8", xml_declaration=True)
4. 删除 xml 文件元素
import xml.etree.ElementTree as xml_et
f = xml_et.parse("users.xml")
root = f.getroot()
# 查找根节点下的 所有 user 节点
for users in root.findall('user'):
# 获取 user 节点中 属性 key:value 的 value 值
user = users.get('key')
if user == "xmcx":
# 获取元素中 name 元素
name = users.find('name')
# 删除 name 元素
users.remove(name)
f.write("users.xml", encoding="utf-8", xml_declaration=True)
5 新增 xml 元素
import xml.etree.ElementTree as xml_et
f = xml_et.parse("users.xml")
root = f.getroot()
# 查找根节点下的 所有 user 节点
for users in root.findall('user'):
# 获取 user 节点中 属性 key:value 的 value 值
user = users.get('key')
if user == "xmcx":
# 新增 name 元素
newelement = xml_et.SubElement(users,"name")
newelement .text = "新增"
f.write("users.xml", encoding="utf-8", xml_declaration=True)