一、xml文件概述

1.xml文件含义

xml文件:可扩展标记语言,可用来标记数据、定义数据类型,是一种用户对自己的标记语言进行定义的源语言。

xml与html比较:
xml:用来传输、存储数据
html:用来显示数据

2.xml结构

  • xml文档为树形结构,从根部开始,扩展到枝叶
  • 第一行是xml声明,定义了xml的版本、所使用的编码
  • :是根元素(根节点)
  • :是子元素(子节点)
  • xml文档必须包含根元素,其是所有其他元素的父元素

    3.xml特征

  • 由标签对组成:

  • 标签可以有属性:
  • 标签对可以嵌入数据:abc
  • 标签可以嵌入子标签(具有层级关系):111

    4.DOM(文档对象模型)

    文档对象模型:Document Object Model,DOM。是针对html和xml提供的一个API,即为了能以编程的方法操作这个html内容(如:增删改元素)。把html或xml看作是一个对象数(DOM树),其本身及其内部所有的东西都可看作是一个对象(节点,node)。
    DOM作用:为了操作html或xml中的元素。(如:通过js把网页的标题修改,可通过document.title = 'test'实现)

二、创建xml文件

1.创建一个xml文件

创建一个xml文件,命名为Class.xml,用来存储班级学生(姓名,年龄,城市)、老师(姓名,年龄,城市)、教务账号(学生和老师的账号,密码)等信息。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Class> <!-- 根元素(父元素) -->
  3. <student> <!-- 元素节点 -->
  4. <name>Jack</name> <!-- 文本节点 -->
  5. <age>28</age>
  6. <city>Beijing</city>
  7. </student>
  8. <student>
  9. <name>Candy</name>
  10. <age>25</age>
  11. <city>Chengdu</city>
  12. </student>
  13. <teacher>
  14. <name>Harry</name>
  15. <age>30</age>
  16. <city>Shanghai</city>
  17. </teacher>
  18. <account>
  19. <login username="student" password="123456" /> <!-- 属性节点 -->
  20. <login username="teacher" password="888888" />
  21. </account>
  22. </Class>

2.xml文件中节点的类型

1)元素节点
2)文本节点
3)属性节点
07 . xml文件中各类型节点的读取方法 - 图1
节点的属性:

  • 节点名称:nodeName
  • 节点值:nodeValue
  • 节点类型:nodeType

    三、xml文件的读取

    1.读取xml元素节点

    案例:查看Class_info.xml文件里的Class节点的属性(节点名称、节点值、节点类型)
    #【元素节点】
    #导入minidom模块
    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)
    
    输出结果:
    Class
    None
    1

    2.读取xml文本节点

    案例:分别打印出Class_info.xml里的学生和老师的详细信息(姓名,年龄,城市)
    #【文本节点】
    #导入minnidom模块
    from xml.dom import minidom
    #打开XML文件
    dom = minidom.parse('Class_info.xml')
    #加载DOM对象元素
    root = dom.documentElement
    #根据标签名称获取标签对象(定位到文本节点)
    names = root.getElementsByTagName('name')
    ages = root.getElementsByTagName('age')
    citys = root.getElementsByTagName('city')
    #分别打印显示XML文档标签对里面的内容
    for i in range(3):
      print(names[i].firstChild.data)
      print(ages[i].firstChild.data)
      print(citys[i].firstChild.data)
      print('\n')
    
    输出结果:
    Jack
    28
    Beijing
    Candy
    25
    Chengdu
    Harry
    30
    Shanghai

    3.读取xml属性节点

    案例:分别读取打印老师和学生的账号、密码
    #【属性节点】
    from xml.dom import minidom
    dom = minidom.parse('Class_info.xml')
    root = dom.documentElement
    logins = root.getElementsByTagName('login')
    for i in range(2):
      print(logins[i].getAttribute('username'))
      print(logins[i].getAttribute('password'))
      print('\n')
    
    输出结果:
    student
    123456
    teacher
    888888

    4.读取xml子节点

    案例:读取子节点的相关属性
    #【子节点】
    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

作者:Fighting_001
链接:https://www.jianshu.com/p/55ff3480d0fa
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。