zoukankan      html  css  js  c++  java
  • 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:数据访问层,负责将业务逻辑层处理后的数据存储到文件系统中,同时负责将文件系统中的数据读取到内存,简单的说,负责数据的读写。

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

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

    结构图:

  • 相关阅读:
    爬虫相关
    进程、线程、协程
    经典排序算法详细介绍
    Pyhton学习-Python与中间件之Memcache(4)
    Python学习-Python操作数据库之MongoDB(2)
    Python学习-Python操作数据库之MySQL(1)
    人工智能安全(一)——初识人工智能
    Windows应急响应和系统加固(12)——SQL Server/MySQL/Oracle日志提取和安全分析
    Windows应急响应和系统加固(11)——Weblogic各类漏洞的日志分析和调查取证
    Windows应急响应和系统加固(10)——Nginx日志分析以及JBoss日志分析
  • 原文地址:https://www.cnblogs.com/liuxiaolu/p/10104214.html
Copyright © 2011-2022 走看看