Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145406
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: Python/Ruby

2014-12-27 09:44:57

一、解析文件

点击(此处)折叠或打开

  1. import xml.etree.ElementTree as ET
  2. tree = ET.parse(file)
  3. root = tree.getroot()
  4. 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声称texttail可以使任意应用程序中的任意结构类型,但是只要不是字符串,那么在写入文件的时候都会报错提示无法序列化。

"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,非常不好用
阅读(3312) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~