XML模块

一:XML模块

  XML全称叫做可扩展标记语言,是一种定义的电子文档结构和描述性语言,可以用来标记数据/定义数据类型。标记翻译为标签,标签指的是某种特殊符号,简单的是XML,就是用标签来定义文档结构。

  一个完整的标签分为三个部分:

    例如:<person name="jack">hello i am a person</person>

    标签名(tagname):person

    属性(attribute):name的值为jack

    文本(text):hello i am a person 

  属性和文本都是可选的,所以你可以这样来定义一个空标签:<person></person>

 

    其他格式要求:

      1:任何的起始标签都必须有一个结束标签

      2:可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/)

      3:标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

      4:所有的属性都必须有值

      5:所有的特性都必须在值的周围加上双引号

      6:最外层必须有且只能有一个标签,称为根标签

标签的叫法:node(节点),element(节点),tag(标签)

二:与json的对比 

  前后台交互数据时,使用json. 

  当需要自定义文档结构时,使用XML。比如java中经常使用XML来作为配置文件,而作为配置文件的常见操作就是通过程序去读取配置信息,而修改增加删除,一般是交给用户来手动完成。

  对比:

  json是JavaScript语言的对象表示法,其仅支持js中的数据类型,(虽然大多数情况下是足够使用的),之所以出现是因为在开发中,通常都需要后台向前台传输数据,那自然是要传输前台能看懂的数据格式,json就是这样一种数据格式,可以轻松的被js语言解析,使用场景多为前后台交互

  而xml支持的数据类型理论上是不受限制的,因为可以完全自定义标签的结构和含义,使用场景也非常广泛,不局限于前后台的数据交互,在一些语言中还经常作为配置文件来使用

  另外,HTML 看起来与XML非常的类似,的确,HTML也属于XML

  如果仅仅将XML用做数据交换格式的话,远不如json来的简单,由于出现时间的关系,有很多早期项目都是使用XML来完成的。

三:使用方法

有如下的XML文件:

# 需求从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最强大的地方就是结构),但是在前后台交互不应该使用。

 四:项目结构设计

所有应用程序本质上都是在帮用户处理数据。

三层结构:将应用程序分为三层,为了达到高内聚低耦合的目的。

1:用户视图层,现在流行前后端分离的设计方式。用户视图层可能是一个手机APP,可能是浏览器,可能是PC端程序,他们的主要职责是与用户交互,收集用户数据,展示数据给用户,在目前的项目中,python的控制台就是我们的视图。

2:业务逻辑层,主要负责接收视图层获取到的数据,并进行判断,验证,处理。

3:数据访问层,负责将业务逻辑层处理后的数据存储到文件系统中,同时负责将文件系统中的数据读取到内存,简单的说,负责数据的读写。

用户视图层与数据访问层不应直接通讯。

当然我们不分任何层级也是可以的,你会发现这么做的问题是,代码看起来结构混乱,可读性差,从而导致维护性差,扩展性差等问题。

结构图:

原文地址:https://www.cnblogs.com/liuxiaolu/p/10104214.html