今日内容:
1、xml模块
2、面向对象编程
一、xml模块
什么是xml?
xml是一种可扩展的标记语言
xml语言的语法:
<person name="jack">hello i am a person</person>
语法分为三个部分:
标签名(tag): person
属性(attribute):name = "jack",其中属性名为name,属性的值为"jack"
文本(text):hello i am a person
语法要求:
1、xml格式的文本最外层只能拥有一个根标签;
2、任何起始标签都必须要有结束标签
3、标签分为单标签(<person/>)及双标签 <person></person>
4、所有属性的值都必须是字符串格式(加上引号)
5、所有的属性都必须有值
6、标签必须是镜像的,最外层的标签最先定义最后结束,最内层的标签最后定义最先结束
与json的对比:
json是js的对象表示法,其结构简单,可以轻松的被js进行解析,多用于前后端的交互
xml是一种语言,其结构较为复杂,但是也可以高度的自定义,在Java中多用于配置文件,但是在python中使用较少
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
对于xml的解析
import xml.etree.ElementTree as ET # 解析整个xml文件 tree = ET.parse("xml1.xml") # 获取根目录 root = tree.getroot() print(root) # <Element 'data' at 0x000001C9AC6B9728> print(root.tag) # 打印根标签的标签名 print(root.attrib) # 显示当前标签的属性,是一个字典 print(root.text) # 显示当前标签的文本内容,是一个字符串 # 显示标签的子孙标签 for tag in root: print(tag) # 对root的子标签进行遍历 for tag in root.findall("country"): print(tag) # 在子标签中查找所有标签名为country的标签 for tag in root.iter(): print(tag) # 对root所有的子孙标签进行遍历 for tag in root.iter('country'): print(tag) # 将子孙中所有标签名为country进行遍历 for tag in root.find("country"): print(tag) # 展示第一个标签名为country的标签下的所有子标签 # 改 # 修改标签得属性、值、增加新标签 for i in root.iter("year"): i.text = str(int(i.text) + 1) # 修改year标签的值 i.set("aaa","1") # 为year标签添加属性 aaa 值为 1 i.set("aaa","heihei") #修改year标签属性的值 tree.write('xml2.xml') # 将修改后的xml写入文件中 # 删除属性 for i in root.findall('country'): for j in i.findall("year"): i.remove(j) # 只有要被删除的分类有权限删除自类的标签 tree.write('xml5.xml') # 添加新节点 year2=ET.Element('year2') # 指定名称 year2.text='新年' year2.attrib={'update':'yes'} #添加 for i in root.findall("country"): root.append(year2) #往country节点下添加子节点 tree.write("xml7.xml")