标签:his 分享 rank sed print bsp 添加 删除节点 pen
使用的XML文件如下:file.xml
<?xml version="1.0"?> <data name="ming"> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
导入模块
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/11/30 0030 18:18 # @Author : ming import xml.etree.ElementTree as ET
读取文件
result = ET.parse("file.xml") # 打开文件 root = result.getroot() # 获取根节点
打印一下根节点信息
print(root.tag, root.attrib) # 根节点标签和属性值 #运行结果:data {‘name‘: ‘ming‘}
打印一下根节点的孩子节点
for i in root: # 循环根节点的孩子节点 print(i.tag, i.attrib) # 打印孩子节点的标签和属性值 print(i[0].tag, i[0].text) # 打印孙子节点中第一个节点的标签和属性值。多层节点都可以通过下标访问 # 运行结果: # country {‘name‘: ‘Singapore‘} # rank 4 # country {‘name‘: ‘Panama‘} # rank 68
findall 直接定位节点
for k in root.findall(‘country‘): # 直接定位该节点 print(k.tag, k.attrib) # 打印孩子节点的标签和属性值 print(k[1].tag, k[1].text) # 打印孙子节点中第一个节点的标签和属性值。多层节点都可以通过下标访问 #运行结果 # country {‘name‘: ‘Singapore‘} # year 2011 # country {‘name‘: ‘Panama‘} # year 2011
iter 遍历所有节点
for m in root.iter(): # 遍历所有节点 print(m.tag, m.attrib, m.text) # 打印所有节点的标签、属性、值
data {‘name‘: ‘ming‘} country {‘name‘: ‘Singapore‘} rank {} 4 year {} 2011 gdppc {} 59900 neighbor {‘name‘: ‘Malaysia‘, ‘direction‘: ‘N‘} None country {‘name‘: ‘Panama‘} rank {} 68 year {} 2011 gdppc {} 13600 neighbor {‘name‘: ‘Costa Rica‘, ‘direction‘: ‘W‘} None neighbor {‘name‘: ‘Colombia‘, ‘direction‘: ‘E‘} None
iter 遍历特定的节点,不遍历子节点
for p in root.iter("country"): # 遍历所有country节点自身,不遍历子节点 print(p.tag, p.attrib) # 打印所有country节点的标签、属性 #运行结果 # country {‘name‘: ‘Singapore‘} # country {‘name‘: ‘Panama‘}
find 查找第一个匹配的节点
firstCountry = root.find("country") # 返回第一个tag为country的element,如没有,返回None print(firstCountry.attrib) # 第一个country节点的属性值 # 运行结果 # {‘name‘: ‘Singapore‘}
append 增加一个新的节点
newEle = ET.Element("Newtag") # 新节点的标签 newEle.attrib = {"name": "NewElement", "age": "20"} # 新节点的属性 newEle.text = "This is a new element" # 新节点的值 # a = root.find("country") # 第一个country节点 # a.append(newEle) # 在第一个country中添加 # # root[0].append(newEle) # 根节点中第一个子节点下添加 root.append(newEle) # 把这个新节点放在哪个节点下,这里的root代表根节点 result.write("file.xml") # 写回原文件
<data name="ming"> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia"/> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica"/> <neighbor direction="E" name="Colombia"/> </country> <Newtag age="20" name="NewElement">This is a new element</Newtag> </data>
修改节点信息
# 修改节点属性 sub1 = root.find("country") sub1.set("name", "Chinese") # 修改name=chinese result.write("file.xml") # 写回原文件 # 修改节点值 sub2 = root.find("country") sub2.find("year").text = "2018" #修改year的值为2018 result.write("file.xml") # 写回原文件
<data name="ming"> <country name="Chinese"> <rank>4</rank> <year>2018</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
删除节点
sub3 = root.find("country") root.remove(sub3) result.write("file.xml") # 写回原文件
<data name="ming"> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica"/> <neighbor direction="E" name="Colombia"/> </country> </data>
标签:his 分享 rank sed print bsp 添加 删除节点 pen
原文地址:http://www.cnblogs.com/ming5218/p/7943602.html