python模块系列之 - xml

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值