一、解析文件

点击(此处)折叠或打开

import xml.etree.ElementTree as ET

tree = ET.parse(file)

root = tree.getroot()

tree.write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None, method="xml")

解析文件的时候有两种常见的错误,

找不到文件:IOError

文件格式非法:xml.etree.ElementTree.ParseError

二、增删节点

#新建节点

ET.Element(tag, attrib={}, **extra)

#新建子节点,返回subelement

ET.SubElement(parent,tag, attrib={}, **extra)

#添加子节点

element.append(subelement)

#删除子节点

element.remove(subelement)

三、element的内容

element.tag:节点标签(名称),;

element.text:一个节点首tag与尾tag之间的全部内容;

element.tail:第一个节点结尾()到第二个节点开头()之间的全部内容

element.attrib:由一个节点全部属性构成的字典

注意:修改该字典的内容会直接修改对应节点的属性,其实节点属性在内存中就是以字典的形式存储的。element属性相关的函数中并没有提供删除属性的函数,我们则可以使用del来删除“del node.attrib[key]”!!!

注意:虽然python声称text和tail可以使任意应用程序中的任意结构类型,但是只要不是字符串,那么在写入文件的时候都会报错提示无法序列化。

"cannotserialize %r (type %s)" % (text,

type(text).__name__)

TypeError: cannot serialize {'1': 'vt1', '2': 'vt2'} (type dict)

四、element属性相关的函数

element.keys():获取节点所有属性的key列表,返回列表

element.items():获取节点所有属性(key,value)列表,返回列表,列表的每个元素为一个(key,value)的元祖

element.get(key,default=None):根据属性名称获取属性值

element.set(key,value):根据属性名称设置属性值

五、element查找子节点相关的函数

element.find(match):获取第一个匹配的子节点,返回一个element

element.findall(match):获取所有匹配的子节点,返回一个element列表

element.findtext(match, default=None):获取第一个匹配的子节点的text

迭代器查找:

element.iter(tag=None):以 当前节点为根节点建立一颗迭代树,按照节点的深度依次遍历每一个节点,如果参数tag不为None且不为'*',那么只要节点的tag与参数指定的tag相等,该节点就会从迭代器中返回。迭代器是动态遍历的,遇到匹配节点就返回,然后再接着遍历,如果遍历过程中树的结构被改变,那么结果是不可预知的。

element.iterfind(match):与iter功能类似,只不过只遍历第一层子节点。

element.itertext():便利所有节点然后返回他们的text,非常不好用

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐