什么是XML文件?
xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
从结构上,很像HTML超文本标记语言。但他们被设计的目的是不同的,具体如下:
- XML 被设计用来传输和存储数据
- HTML 被设计用来显示数据
创建xml文件:
<?xml version="1.0" encoding="UTF-8"?> <Class> <student> <name>Nancy</name> <age>23</age> <city>Chengdu</city> </student> <student> <name>Anne</name> <age>24</age> <city>Chongqing</city> </student> <student> <name>Hugh</name> <age>25</age> <city>Beijing</city> </student> <teacher> <name>Bob</name> <age>27</age> <city>Shanghai</city> </teacher> <account> <login username="student" password="123456"/> <login username="teacher" password="888888"/> </account> </Class>
XML节点
xml文件节点一般包含3类:
- 元素节点
- 文本节点
- 属性节点
每个节点都拥有包含着关于节点某些信息的属性。这些属性是:
- nodeName(节点名称)
- nodeValue(节点值)
- nodeType(节点类型)
读取元素节点
案例:查看Class_info.xml文件里Class节点的属性(结点名称,节点的值、节点类型)
from xml.dom import minidom #加载xml文件 dom=minidom.parse('Class_info.xml') #加载dom对象元素 root=dom.documentElement #打印节点信息 print(root.nodeName) #获取节点名称 print(root.nodeValue) #获取节点值 print(root.nodeType) #获取节点类型,元素节点返回1,属性节点返回2
运行结果:
Class
None
1
读取文本节点的值
案例:分别打印出Class_info.xml里的学生和老师的详细信息(姓名,年龄、城市)
from xml.dom import minidom #打开文件 dom=minidom.parse('Class_info.xml') #获取文档对象元素 root=dom.documentElement #根据标签名称获取标签对象 names=root.getElementsByTagName('name') ages=root.getElementsByTagName('age') citys=root.getElementsByTagName('city') #分别打印显示xml文档标签对里面的内容 for i in range(4): print(names[i].firstChild.data) print(ages[i].firstChild.data) print(citys[i].firstChild.data)
运行结果:
Nancy
23
Chengdu
Anne
24
Chongqing
Hugh
25
Beijing
Bob
27
Shanghai
读取属性节点的值
案例:分别读取打印老师和学生的账号密码。
from xml.dom import minidom dom=minidom.parse('Class_info.xml') root=dom.documentElement logins=root.getElementsByTagName('login') #获取login标签的username属性 for i in range(2): username=logins[i].getAttribute('username') password=logins[i].getAttribute('password') print(username) print(password)
运行结果:
student
123456
teacher
888888
读取子节点信息
案列:读取子节点<student>相关属性
from xml.dom import minidom dom=minidom.parse('Class_info.xml') root=dom.documentElement tags=root.getElementsByTagName('student') print(tags[0].nodeName) print(tags[0].nodeType) print(tags[0].nodeValue)
运行结果:
student
1
None