# v01 import xml.dom.minidom # 负责解析xml文件 from xml.dom.minidom import parse # 使用minidom打开xml文件 DOMTree = xml.dom.minidom.parse("student.xml") #得到文档对象 doc = DOMTree.documentElement # 显示子元素 for ele in doc.childNodes:if ele.nodeName =="Teacher":print("-------Node:{0}-----".format(ele.nodeName))childs = ele.childNodesfor child in childs:if child.nodeName =="Name":# data是文本节点的一个属性,表示他的值print("Name: {0}".format(child.childNodes[0].data))if child.nodeName =="Mobile":# data是文本节点的一个属性,表示他的值print("Mobile: {0}".format(child.childNodes[0].data))if child.nodeName =="Age":# data是文本节点的一个属性,表示他的值print("Age: {0}".format(child.childNodes[0].data))if child.hasAttribute("detail"):print("Age-detail: {0}".format(child.getAttribute("detail")))
<School><Teacherdesc&#61;"PythonTeacher"score&#61;"good"><Name>LiuDanaName><Age_1Detail&#61;"Age for year 2010">18Age_1><Mobile>13260446055Mobile>Teacher><Student><NameOther&#61;"他是班长">ZhangSanName><AgeDetail&#61;"The yongest boy in class">14Age>Student><Student><Name>LiSiName><Age>19Age><Mobile>15578875040Mobile>Student> School>
etree
以树形结构来表示xml
root.getiterator:得到相应的可迭代的node集合
root.iter
find(node_name):查找指定node_name的节点,返回一个node
root.findall(node_name):返回多个node_name的节点
node.tag: node对应的tagename
node.text:node的文本值
node.attrib&#xff1a; 是node的属性的字典类型的内容
# v02 import xml.etree.ElementTree root &#61; xml.etree.ElementTree.parse("student.xml") print("利用getiterator访问&#xff1a;") nodes &#61; root.getiterator() for node in nodes:print("{0}--{1}".format(node.tag, node.text)) print("利用find和findall方法&#xff1a;") ele_teacher &#61; root.find("Teacher") print(type(ele_teacher)) print("{0}--{1}".format(ele_teacher.tag, ele_teacher.text)) ele_stus &#61; root.findall("Student") print(type(ele_stus)) for ele in ele_stus:print("{0}--{1}".format(ele.tag, ele.text))for sub in ele.getiterator():if sub.tag &#61;&#61;"Name":if"Other"in sub.attrib.keys():print(sub.attrib[&#39;Other&#39;])
xml文件写入
更改
ele.set:修改属性
ele.append&#xff1a;添加子元素
ele.remove&#xff1a;删除元素
import xml.etree.ElementTree as et tree &#61; et.parse(r&#39;to_edit.xml&#39;) root &#61; tree.getroot() for e in root.iter(&#39;Name&#39;):print(e.text) for stu in root.iter(&#39;Student&#39;):name &#61; stu.find(&#39;Name&#39;)if name !&#61;None:name.set(&#39;test&#39;, name.text *2) stu &#61; root.find(&#39;Student&#39;) #生成一个新的 元素 e &#61; et.Element(&#39;ADDer&#39;) e.attrib &#61;{&#39;a&#39;:&#39;b&#39;} e.text &#61;&#39;我加的&#39; stu.append(e) # 一定要把修改后的内容写回文件&#xff0c;否则修改无效 tree.write(&#39;to_edit.xml&#39;)
<School><Teacher><Name>LiuYingName><Agedetail&#61;"Age for year 2010">18Age><Mobile>13260446056Mobile>Teacher><Student><NameOther&#61;"&#20182;&#26159;&#29677;&#38271;"test&#61;"ZhangSanZhangSan">ZhangSanName><AgeDetail&#61;"The yongest boy in class">14Age><Student><Nametest&#61;"luodayouluodayou">luodayouName><Age>59Age><Mobile>1387878776787Mobile>Student><Student><Nametest&#61;"LiSiLiSi">LiSiName><Age>19Age><Mobile>13240484187Mobile>Student> School>
生成创建
SubElement v04
minidom v05
etree v06
# v04 import xml.etree.ElementTree as et stu &#61; et.Element("Student1") name &#61; et.SubElement(stu,&#39;Name&#39;) name.attrib &#61;{&#39;lang&#39;,&#39;en&#39;} name.text &#61;&#39;maozedong&#39; age &#61; et.SubElement(stu,&#39;Age&#39;) age.text &#61;18 et.dump(stu)