使用python操作XML

 

一、什么是XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

二、读取xml

官方文档

2.1.导入模块

import xml.etree.ElementTree as ET

2.2.读取解析XML

可以从xml文件、字符串中解析,新建一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student>
        <name>张三</name>
        <age>69</age>
        <sex></sex>
    </student>
    <student>
        <name>闫芳</name>
        <age>50</age>
        <sex></sex>
    </student>
    <student>
        <name>雷雷</name>
        <age>43</age>
        <sex></sex>
    </student>
</students>

2.3.从xml文件中读取

使用getroot()获取根节点,得到的是一个Element对象

tree = ET.parse('students.xml')
root = tree.getroot()

2.4.访问XML

每个Element都有以下属性

#tag = element.text #访问Element标签
#attrib = element.attrib #访问Element属性
#text = element.text #访问Element文本

for element in root.findall('student'):
    tag = element.tag #访问Element标签
    attrib = element.attrib #访问Element属性
    text = element.find('name').text #访问Element文本
    print(tag, attrib, text)

print(root[0][0].text) #子节点是嵌套的,我们可以通过索引访问特定的子节点

三、查找元素

Element 提供了一些方法来帮助我们对他的子节点进行遍历

1、Element.iter()

import xml.etree.ElementTree as ET

#从xml文件中读取,使用getroot()方法获取根节点,得到的是一个element对象
tree = ET.parse('test.xml')
root = tree.getroot()

#iter将获取回来的多个元素对象放在列表中
for student in root.iter('student'):
    #每一个student元素下面有多个标签,这里0代表第一个标签的下标
    print(student[0].text)

2、Element.findall()

import xml.etree.ElementTree as ET

#从xml文件中读取,使用getroot()方法获取根节点,得到的是一个element对象
tree = ET.parse('test.xml')
root = tree.getroot()

#取出所有的student标签
for element in root.findall('student'):
    #输出每个student标签中的子标签文本信息
    name = element.find('name').text
    age = element.find('age').text
    score = element.find('sex').text
    print(name, age, score)

四、创建XML

from xml.etree.ElementTree import Element, SubElement, ElementTree

#开始构建 xml 树
# 生成根节点
root = Element('html')

# 生成第一个子节点 head
head = SubElement(root, 'head')
# head 节点的子节点
title = SubElement(head, 'title')
title.text = 'Well Augus!'

# 生成 root 的第二个子节点 body
body = SubElement(root, 'body')
# body 的内容
body.text = 'I love Augus!'

#得到了一个 xml 树的对象 tree 以及它的根节点的对象 root
tree = ElementTree(root)

# 生成xml文件
tree.write('result.xml', encoding='utf-8')

修改XML

  • ElementTree.write()将构建的XML文档写入文件。
  • Element.text = '' 直接改变字段内容
  • Element.append(Element) 为当前的Elment对象添加子对象 
  • Element.remove(Element) 删除Element节点
  • Element.set(key, value) 添加和修改属性
  • ElementTree.write('filename.xml') 写出(更新)XMl文件
import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
root = tree.getroot()
sub1 = root.findall('student/name')  # 找到student下的子标签name
for one in sub1:
    one.text = "阿萨斯"  # 修改标签内
tree.write("test5.xml", encoding="UTF-8")  # 保存修改
posted @ 2020-11-21 17:38  酒剑仙*  阅读(1490)  评论(0)    收藏  举报