#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: [email protected]
@software: PyCharm
@file: xml.etree.ElementTree模块使用.py
@time: 2018/11/14 14:34
"""
"""
1、ElementTree实例代表整个XML树,可以使用getroot()来获取根节点。Element表示树上的单个节点,它是
iterable的。操作整个XML文档时使用ElementTree类,比如读写XML文件。操作XML元素及其子元素时使用
Element类。
2、xml.etree.cElementTree是用C语言实现的模块,接口上与xml.etree.ElementTree完全相同,然而处理效率
更快,但并不是所有平台均支持,因为我们可以尝试导入,若没有就导入ElementTree
3、每个元素包含如下属性:
tag:string对象,表示数据代表的种类。
attrib:dictionary对象,表示附有的属性。
text:string对象,表示element的内容。
tail:string对象,表示element闭合之后的尾迹。
若干子元素(child elements)
4、查找方法:
Element.findall(match)方法通过tag名字或xpath匹配第一层子元素,按照子元素顺序以列表形式返回所有
匹配的元素。
Element.find(match)方法通过tag名字或xpath在第一层子元素中查找第一个匹配的元素,返回匹配的元素
或None。
Element.get(key, default=None)返回元素名字为key的属性值,如果没有找到,返回None或设置的默认值。
5、通过Element对象的方法修改Element对象
Element.text=value可以直接修改其text属性。
Element.tail=value可以直接修改其tail属性。
Element.set(key, vlaue)可以添加新的attrib。
Element.append(subelement)可以添加新的子元素。
Element.extend(subelements)添加子元素的列表(参数类型是序列)。
Element.remove(subelement)可以删除子元素
6、使用ET.SubElement(parent, tag_name)可以快速建立子元素关系,使用ET.dump(elem)可以输出elem的内容
到标准输出(elem可以是一个Element对象或ElementTree对象)
7、ET.parse(filename)一次性将整个XML文件加载到内存,ET.iterparse(filename)采用增量形式加载XML数据,
占据更小的内存空间。
"""
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
tree = ET.parse("country_data.xml")
root = tree.getroot()
"""
ET.dump(root)
print(root.tag)
print(root.attrib)
print(root.text.strip())
print(root.tail)
tree.findall('country/*') //查找孙子节点元素
tree.findall('.//rank') //查找任意层次元素
tree.findall('country[@name]') // 包含name属性的country
tree.findall('country[@name="Singapore"]') // name属性为Singapore的country
tree.findall('country[rank]') // 孩子元素中包含rank的country
tree.findall('country[rank="1"]') // 孩子元素中包含rank且rank元素的text为1的country
tree.findall('country[1]') // 第一个country
tree.findall('country[last()]') // 最后一个country
tree.findall('country[last()-1]') // 倒数第二个country
"""
#遍历子节点
def getChild(elment,indent=""):
indent = indent
for child in elment:
if child.text:
print(indent,child.tag,child.attrib,child.text.strip(),root.tail)
else:
print(indent,child.tag, child.attrib, None, root.tail)
getChild(child,indent + " ")
getChild(root)
print("*"*40)
for node in tree.findall('country/year'):
print(node.tag,node.text)
node.tag = "newyear"
node.text = "2018"
print(node.tag,node.text)
node.tag = "year"
tree.write('country_data.xml') #保存
Python:xml读写(xml.etree.ElementTree模块使用)
猜你喜欢
转载自blog.csdn.net/caoxinjian423/article/details/84195987
今日推荐
周排行