python elementtree_使用python解析xml之ElementTree
一、解析文件
点击(此处)折叠或打开
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,非常不好用
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)