xml.etree.ElementTree介绍:ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少
1.解析XML文件或XML字符串
import xml.etree.ElementTree as ET
# 解析xml文件
tree = ET.parse("test.xml") # 输出 <class 'xml.etree.ElementTree.ElementTree'>
root = tree.getroot() # 输出 获取根节点 <Element 'data' at 0x02BF6A80>
# 解析xml字符串
data = open("test.xml").read() # data字符串xml
root = ET.fromstring(data) # <Element 'data' at 0x036168A0>
2.查找节点
import xml.etree.ElementTree as ET
# 当要获取属性值时,用attrib方法
# 当要获取节点值时,用text方法
# 当要获取节点名时,用tag方法
# 解析xml字符串
root = ET.fromstring("xmlstr")
# 遍历xml文档的第二层
for child in root:
# 第二层节点的标签名称和属性
print(child.tag,":", child.attrib)
# 遍历xml文档的第三层
for children in child:
# 第三层节点的标签名称和属性
print(children.tag, ":", children.attrib)
# 获取element的方法
# 1.获得指定节点->getiterator()方法
list_node = root.getiterator("list")
for node in list_node:
print_node(node)
# 2.获得指定节点->findall()方法->返回所有list节点
list_node = root.findall("list") # list 或 data/list
print_node(list_node )
# 3.获得指定节点->find()方法 ->返回第一个list节点
node_find = root.find('list') # list 或 data/list
print_node(node_find)
# 4.获得子节点->getchildren()
for node in list_node:
node_child = node.getchildren()[0]
print node_child.tag, '=> ', node_child.text
3.添加节点元素
# 1.使用append方法添加子节点
# 创建新的子节点
elem1 = ET.Element('test_append', {'name':'test'})
elem1.text = 'elem 1'
# 向根节点添加新的子节点
root.append(elem1) # root 可以是其它查询的子节点
# 2.# 使用insert方法添加子节点insert
elem1= ET.Element("test_insert")
elem1.text = "elem 1"
root.insert(5, elem1)
4.修改节点元素
# 修改 值、删除值、添加属性、删除属性
for node in list_node:
node.text = "修改后的值" # 修改值1
node.set('name', 'White') # 修改值2
node.set("new", "yes") # 添加属性new
del node.attrib['new'] # 删除属性new
node.remove(node) # 删除值
5.节点转换字符串
# ElementTree.Element转换为String
ET.tostring(list_node, encoding='utf8', method='xml').decode()