xml模块
一.XML模块xml指的是可扩展标记语言,是一种定义电子文档结构和描述的语言,可以用来标记数据、定义数据类型。 什么时候用xml? 当需要自定义文档结构时,使用xml。在java中经常会使用xml来作为配置文件。而作为配置文件经常的操作是通过程序去读取配置文件信息。标签的叫法:node(节点),elment(元素),tag(标签) xml文档格式: 一个完整的标签分为三个部分: <person name="jack">hello i am a person</person> 1.标签名(tagname):person 2.属性(attribute):name值为jack 3.文本(text):hello i am a person 属性和文本都是可选的,可以定义一个空标签: <person></person> 其他格式要求: 1.任何的起始标签都必须有一个结束标签。 2.可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。 3.标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。 4.所有的属性都必须有值。 5.所有的特性都必须在值的周围加上双引号。 6.最外层必须有且只能有一个标签,称为根标签 xml与json的对比: json主要用于前后台数据交互,json使用起来比xml简单,而xml支持的数据类型理论上是不受限制的,因为可以完全自定义标签的结构和含义,使用场景也非常广泛,不局限于前后台的数据交互,在一些语言中还经常作为配置文件来使用,而且xml出现的时间比较早,早期项目都是用的xml。 1.三个用于查找标签函数 iter("标签名") #全文查找 find("标签名") #查找子节点匹配的第一个 findall("标签名") #查找字节点匹配的所有 2.访问标签的内容 element.tag 获取标签名 element.attrib 获取属性 element.text 获取文本 3.修改文档内容 elment.tag = "标签名" element.text = "文本" element.set("属性名","属性值") 4.删除节点 root.remove(标签对象) 5.添加子标签 #创建标签对象 year2=ET.Element(‘year2‘) # 指定名称 year2.text=‘新年‘ year2.attrib={‘update‘:‘yes‘} #添加 country.append(year2) #往country节点下添加子节点 删除添加修改后都需要调用write写入到文件 tree.write("文件名"),#注意文档对象才能执行写入操作 #countrys.xml <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2009</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2012</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2012</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data> # 需求从conuntrys中获取所有的国家名称 # 取别名 可以用于简化书写 import xml.etree.ElementTree as ET tree = ET.parse("countrys") # 获取根标签 root = tree.getroot() # 第一种获取标签的方式 # iter() 全文查找 # 获取迭代器 如果不指定参数 则迭代器迭代的是所有标签 # print(root.iter()) # 获取迭代器 如果指定参数 则迭代器迭代的是所有名称匹配的标签 # for e in root.iter("rank"): # print(e) # 第二种获取标签的方式 # 在当前标签下(所有子级标签)寻找第一个名称匹配的标签 # print(root.find("rank")) # 第三种获取标签的方式 # 在当前标签下(所有子级标签)寻找所有名称匹配的标签 # print(root.findall("rank")) # 练习 找到新加坡中year这个标签 # 1.拿到所有国家标签 # for e in root.iter("country"): # # 标签的三个内容 # #print(e.tag) # 标签名称 # #print(e.attrib)# 属性 字典类型 # #print(e.text) # 文本内容 # if e.attrib["name"] == "Singapore": # y = e.find("year") # print(y.text) # 在程序中修改文档内容 # 把所有year标签的文本加1 # for e in root.iter("year"): # e.text = str(int(e.text) + 1) # # # 做完修改后要将修改后的内容写入文件 # tree.write("countrys") # 把新加坡国家删除 # for e in root.findall("country"): # print(e) # if e.attrib["name"] == "Singapore": # # 删除时 要通过被删除的父级标签来删除 # root.remove(e) # # # tree.write("countrys2") # 用程序将中国的信息写入文档中 # 添加时 也需要将要添加的数据做成一个Element c = ET.Element("country",{"name":"china"}) # 在国家下有一堆子标签 ranke = ET.Element("ranke",{"updated":"yes"}) c.append(ranke) year = ET.Element("year") year.text = "2018" c.append(year) #添加到root标签中 root.append(c) tree.write("countrys2") # 一般不会通过程序 去修改 删除 和添加 # 总结: # 什么时候应该使用XML格式 # 当你需要自定文档结构时 (XML最强大的地方就是结构) # 前后台交互不应该使用 import xml.etree.ElementTree as ET # 创建根标签 root = ET.Element("root") root.text = "这是一个XML文档!" c = ET.Element("country",{"name":"china"}) root.append(c) tree = ET.ElementTree(root) # 参数: 文件名称 编码方式 是否需要文档声明 tree.write("new.xml",encoding="utf-8",xml_declaration=True) 二.项目开发过程项目的生命周期: 1.需求分析 2.项目设计 3.项目开发 4.项目测试 5.上线运行 6.维护更新 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |