概要:了解XML,熟悉python的读取操作,以及修改、删除操作。
一、概述
XML(eXtensible Markup Language),即可扩展标记语言,可以任意定义需要的标签,因为它扩展的灵活性,被广泛应用于各类数据的传输和存储。
Python对XML提供了良好的模块支持,在各类模块处理方式中,ElementTree模块因为他的简单易用性得到了广泛应用。
二、关于XML实例说明
1、XML文件采用一种树形表示,由一个根节点、子节点组成,每个节点都可以拥有“属性(attrib)”、“内容(text)”、“标签(tag)”三部分内容。
2、XML必须遵循的规范性:
· XML 文档必须有一个根元素
· XML 标签区分大小写
· XML 元素嵌套必须正确
· XML 文档必须有开始标签、关闭标签配对
· XML 属性必须加引号
3、如下“2019-students.xml”文档,作为后续python处理的基础:
xiaoli
male
15
80
86
90
xiaohuang
male
16
81
83
76
xiaozhang
male
15
85
84
80
90
关于节点的“属性(attrib)”、“内容(text)”、“标签(tag)”具体指什么,可以通过python的输出直观的认识下。
三、python读写xml文档
1、新建myxml工程
2、新建python文件xml_test.py文件,实现编码
#模块导入
import xml.etree.ElementTree as ET
######################################
#子函数编写
#读操作
def read_xml(root):
# 获取二级节点信息
students = root.findall("student")
for student in students:
name = student.find("name")
print("")
print("name节点的名称为:%s, 属性为:%s, 文本内容:%s" % (name.tag, name.attrib, name.text))
# result有“元素内容”,没有“文本内容”,所以文本内容为空
result = student.find("result")
# 遍历所有子节点
for course in result:
print("result子节点的名称为:%s, 文本内容:%s" % (course.tag, course.text))
return
#修改操作
def change_xml(root):
students = root.findall("student")
for student in students:
# 1、删除不合规元素physics
result = student.find("result")
for course in result:
if course.tag == "physics":
result.remove(course)
# 2、修改name元素为对应中文
name = student.find("name")
if name.text == 'xiaoli':
name.text = '小李'
elif name.text == 'xiaohuang':
name.text = '小黄'
elif name.text == 'xiaozhang':
name.text = '小张'
if __name__ == '__main__':
#原始文件
filename = r'E:debug2019-students.xml'
tree = ET.parse(filename)
#获得根节点
root = tree.getroot()
print("根节点的名称为:%s, 属性为:%s" % (root.tag,root.attrib))
#读操作
read_xml(root)
# 修改操作
change_xml(root)
#保存新文件
filename_new = r'E:debug2019-students_new.xml'
tree.write(filename_new, "UTF-8")
4、测试验证
4.1、读取部分运行结果
4.2、修改部分运行结果
5、总结
熟悉XML规范,程序编码才能更加规范效率。