以下都是使用ElementTree处理XML
from xml.etree import ElementTree as ET
xml是一种层级化的数据结构,可以使用树状结构表示
ElementTree:表示整个xml层级结构
Element:表示树形结构中的父节点
SubElement:表示树形结构中的所有子节点,有些节点既可以是父节点,也可以是子节点
例如:上图中.......部分
读入根节点方法(一)
# tree就是一个ElementTree对象
tree = ET.parse(sample.xml)
#root是根节点即上图中的
root = tree.getroot()
读入根节点方法(二)
data = open("sample.xml").read()
root = ET.fromstring(data)
ElementTree中类对象的值
tag:对应xml文件Tag部分,以字符串结构存储,例如'lab','person'
attrib:对应xml文件Attribute部分,以字典结构存储,例如{'name':'Blue'}
text:对应xml文件Elment部分,以字符串结构存储,例如22中'22'
解析xml文件
#使用for...in...遍历数据
from xml.etree import ElementTree as ET
tree = ET.parse('G:/xml/sample.xml')
#获取根节点
root = tree.getroot()
for person in root:
print(person.tag, person.attrib)
for data in person:
print(data.tag, data.text)
输出:
/>>>person {'name': 'Blue'}
/>>>age 22
/>>>gender male
/>>>person {'name': 'Yellow'}
/>>>age 20
/>>>gender female
from xml.etree import ElementTree as ET
#首先创建根节点
root = ET.Element('lab')
#添加子节点SubElement(父节点Element对象, Tag字符串格式, Attribute字典格式)
person1 = ET.SubElement(root, 'person', {'name':'Blue'})
#添加子节点
age1 = ET.SubElement(person1, 'age')
#添加text,即22,字符串格式
age1.text = '22'
gender1 = ET.SubElement(person1, 'gender')
gender1.text = 'male'
person2 = ET.SubElement(root, 'person', {'name':'Yellow'})
age2 = ET.SubElement(person2, 'age')
age2.text = '20'
gender2 = ET.SubElement(person2, 'gender')
gender2.text = 'female'
#将根目录转化为xml树状结构(即ElementTree对象)
tree = ET.ElementTree(root)
#在终端显示整个xml内容
ET.dump(root)
#写入xml文件
tree.write('G:/pythonStudy/xml/sample.xml', encoding="utf-8", xml_declaration=True)
#可以使用append方法添加子节点
tree = ET.parse('G:/pythonStudy/xml/sample.xml')
root = tree.getroot()
#创建新的子节点
person3 = ET.Element('person', {'name':'Brown'})
age3 = ET.SubElement(person3, 'age')
age3.text = '20'
gender3 = ET.SubElement(person3, 'gender')
gender3.text = 'male'
#向根节点添加新的子节点
root.append(person3)
#写入
tree.write('G:/pythonStudy/xml/sample.xml', encoding="utf-8", xml_declaration=True)
tree = ET.parse('G:/pythonStudy/xml/sample.xml')
root = tree.getroot()
#查找root根节点下面的所有Tag为‘person’的节点
person = root.findall('person')
#删除第一个person子节点
root.remove(person[0])
#新增或修改attitude
person[1].set('name', 'White')
#新增子节点
root.append(childElement)
#修改text直接访问即可
person[2].text = '25'
附本文的创建例程和VOC标签格式xml文件的解析和添加标签例程
https://github.com/A-mockingbird/Practice