python 内置模块 xml 模块随笔
XML,可扩展标记语言,用来传输和存储数据。
XML代码格式如下 开头和结尾一样的为自闭和标签 就像开头的<data>和结尾也有一个<data> 内容有=号的为有属性
<country name="Liechtenstein">属性就是“Liechtenstein”,<gdppc>14100</gdppc>就是没有属性只有文本
下面是一段xml代码:
<data>
<country name="Liechtenstein"> <rank updated="yes">2</rank> <year updated="yes">2010</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year updated="yes">2013</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year updated="yes">2013</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
xml中节点Element类的函数
tag 当前节点标签名
attrib 当前节点属性
text 当前节点内容
append 添加一个子节点
clear 清空节点
extend 为当前节点添加 n 个子节点
find 获取第一个寻找到的子节点
findall 获取所有的子节点
findtext 获取第一个寻找到的子节点的内容
get 获取当前节点的属性
insert 在当前节点创建子节点,然后插入指定位置
items 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
iter 在根据节点名称寻找所有指定的节点,并返回一个迭代器
iterfind 获取所有指定的节点,并放在一个迭代器中
itertext 在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
keys 获取当前节点的所有属性的 key
makeelement 创建一个新节点
remove 删除某个节点
set 设置当前节点属性
具体各步操作如下
1 import xml.etree.ElementTree as ET 2 #导入Python xml模块 3 4 5 tree = ET.parse("xml_lesson")
#打开xml模块 6 root = tree.getroot()#获取当前文件的根节点 7 print(root.tag)#打印根节点的名称 8 9 #历遍xml文档注释的为打印根节点的名称和属性 10 for i in root: 11 12 #print(i.tag) 13 #print(i.attrib) 14 for j in i: 15 #print(j.tag) 16 #print(j.attrib) 17 print(j.text) 18 19 20 21 22 # 遍历xml文档 23 for child in root: 24 print(child.tag, child.attrib) 25 for i in child: 26 print(i.tag, i.text) 27 28 #只遍历year 节点 29 for node in root.iter('year'):#只遍历某一个节点.iter方法 30 print(node.tag, node.text) 31 # --------------------------------------- 32 33 import xml.etree.ElementTree as ET 34 35 tree = ET.parse("xml_lesson") 36 root = tree.getroot() 37 38 #修改 39 for node in root.iter('year'):#修改某一个标签内容先用.itre取到该标签 40 new_year = int(node.text) + 1#int方法为标签后加一 41 node.text = str(new_year)#str直接赋值 42 node.set("updated", "yes")#传属性一样 43 44 tree.write("xml_lesson")#修改完保存 45 46 #删除node 47 for country in root.findall('country'): 48 rank = int(country.find('rank').text) 49 if rank > 50: 50 root.remove(country) 51 52 tree.write('output.xml')
创建xml文件
import xml.etree.ElementTree as ET new_xml = ET.Element("namelist") name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) age = ET.SubElement(name, "age", attrib={"checked": "no"}) sex = ET.SubElement(name, "sex") sex.text = '33' name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"}) age = ET.SubElement(name2, "age") age.text = '19' et = ET.ElementTree(new_xml) # 生成文档对象 et.write("test.xml", encoding="utf-8", xml_declaration=True)
from xml.etree import ElementTree as ET 2 #创建根节点 3 root=ET.Element("home",{"name":"root"}) 4 5 #创建子节点,也可以用下面的方式创建,但只是创建,还没有加到任何节点下面 6 #sub=root.makeelement("son",{"sonName":"haha"}),下面同样可以 7 sub=ET.Element("son",{"sonName":"haha"}) 8 9 subsub=ET.Element("subson",{"subsonName":"xixi"}) 10 11 root.append(sub) 12 13 sub.append(subsub) 14 tree=ET.ElementTree(root) 15 tree.write("createXml.xml") 16 17 ###########结果(实际上是没有缩进的)############ 18 <home name="root"> 19 <son sonName="haha"> 20 <subson subsonName="xixi" /> 21 </son> 22 </home>

浙公网安备 33010602011771号