zoukankan      html  css  js  c++  java
  • XML

    XML:

    什么是xml:全程叫做可扩展标记语言。

    是一种定义电子文档结构和描述的语言,可以用来标记数据、定义数据类型。

    用户可以对自己的标记语言进行定义和扩展,由W3C(万维网标准组织)推出,几乎所有的编程语言都支持该格式

    标记翻译为标签,标签指的是某种特殊符号,简单的说XML就是标签来定义文档结构和数据。

    XML文档格式

    来看一个例子:

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

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

    标签名(tagname) 属性(attribute) 文本(text)

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

    <person></person>

    其他格式要求:

    一、任何的起始标签都必须有一个结束标签。

    二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法

    是在大于符号之前紧跟一个斜线(/)例如<person/>。

    XML解析器会其翻译为<person></person>

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

    四、所有的属性都必须有值

    五、所有的属性都必须在值的周围加上双引号

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

    与JSON的对比

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

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

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

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

    使用XML模块解析

    准备数据:

    <?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 #ET只是别名

    tree = ET.parse('xmltest.xml')

    root = tree.getroot()

    print(root.tag)

    #遍历xml文档
    for child in root:
    print('========>',child.tag,child.attrib,child.attrib['name'])
    for i in child:
    print(i.tag,i.attrib,i.text)

    #只遍历year 节点
    for node in root.iter('year'):
    print(node.tag,node.text)
    #---------------------------------------

    import xml.etree.ElementTree as ET

    tree = ET.parse("xmltest.xml")
    root = tree.getroot()

    #修改
    for node in root.iter('year'):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set('updated','yes')
    node.set('version','1.0')
    tree.write('test.xml')


    #删除node
    for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank > 50:
    root.remove(country)

    tree.write('output.xml')

    三个用于查找标签函数

    iter(‘标签名’)#全文查找

    find(‘标签名’)#查找子节点匹配的第一个

    findall(‘标签名’)# 查找子节点匹配的所有标签

    访问标签的内容

    element.tag  获取标签名

    element.attrib 获取属性

    element.text 获取文本

    修改文档内容

    element.tag = ‘标签名’

    element.text = ‘文本’

    element.set(‘属性名’,‘属性值’)

    删除节点

    root.remove(标签对象)

    添加字标签

    创建标签对象

    year = ET.Element(‘year’) # 指定名称

    year.text = ‘新年’

    year.attrib = {‘update’:‘yes’}

    #添加

    country.append(year) #往country节点下添加子节点

    删除添加修改后都需要调用write写入到文件

    tree.write(‘文件名’) # 注意文档对象才能执行写入操作

    代码生成XML文档(了解)

    import xml.etree.ElementTree as ET
    new_xml = ET.Element("namelist")
    name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    age = ET.SubElement(name,"age",attrib={"checked":"no"})
    sex = ET.SubElement(name,"sex")
    sex.text = 'man'
    name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    age = ET.SubElement(name2,"age")
    age.text = '19'
    et = ET.ElementTree(new_xml) #生成文档对象
    et.write("test.xml", encoding="utf-8",xml_declaration=True)

    ET.dump(new_xml) #打印生成的格式

    总结:xml的解析比起json而言非常复杂,因为其扩展性远比json高,在java中常作为配置文件,当你在前后台进行数据交互时,优先使用json格式

    面向对象:

    什么是面向过程:

    面向过程的程序设计:核心就是过程二字,就是指解决问题的步骤,即先干什么,再干什么,后干什么,一步一步来,有流水线化,是一种机械化的思维方式

    优点:可以把复杂的问题流程化,也就是简单化。

    缺点:就是扩展性低,维护不易

    应用场景:一旦完成基本很少改变的场景,著名例子有Linux内核,git

    为什么需要面向对象:

    因为当今时代背景下,通常应用程序对扩展性和维护性要求都是非常高的,为什么?想想qq,游戏,因为面向的群从,所以需要不断的更新和维护。

    什么是面向对象编程

    面向对象编程——Object Oriented Programming, 简称OOP,是一种编程思想。

    它将对象作为程序的基本单元

    将数据和处理数据的程序封装到对象中

    以提高软件的复用性,灵活性和扩展性为首要目的

    面向对象编程优缺点

    案例分析1:把大象装进冰箱如何实现

    案例分析2: 要分开一家公司

    面向对象编程的优点:提高了扩展性,复用性,维护性

    缺点:解决问题的复杂化高于面向过程

    类与对象

    对象:

    就是特征与技能的结合体

    类:

    就是一系列有相同特征和技能的对象的集合体

    创建类与对象:

    定义类:

    以学生类Student为例,在Python 中,定义类通过class关键字:

    class Stduent:

           pass

    class 后面紧接着是类名,即Student,遵循python 编码规范,类名通常是大写开头的单词,多个单词时使用驼峰命名法

    创建对象

    创建对象也称之为实例化,定义好Student类后,就可以根据Student类创建出Student的实例,创建实例通过类名加上()实现:

    stu1 = Student()
    print(stu1)
    #输出 <__main__.Student object at 0x10b11d588>
    print(Student)
    #输出 <class '__main__.Student'>

    根据输出可以看到

    变量名stu1指向一个Student类的实例,0x10b11d588是实例的内存地址,每个实例的地址都不相同,

    Student本身则是一个类(class)

    对象的属性操作

    对象是特征(属性)与行为(方法)的结合体

    stu 这个东西目前不具备任属性和方法,要为其添加属性可以在创建对象后使用点语法(变量名加.)比如为stu 对象添加name属性

    stu1.name = ‘Jerry’

    同样通过点语法来获取对象的属性值

    print(stu1.name) # Jerry

  • 相关阅读:
    9.逻辑二十大题3
    8.逻辑二十大题2
    7.逻辑二十大题1
    6.输入四个数,找出最大值方法二
    5.输入四个数,找出最大值
    4.判断平闰年
    【练习4.3】在图片上画矩形并高亮显示矩形区域、统计矩形区域中像素情况并绘制直方图
    【练习4.2】使用鼠标事件获取图片像素值
    【练习4.1】图像转换、Canny检测、图像合并、在图像上输出文字
    【练习3.5】使用感兴趣区域(ROI)
  • 原文地址:https://www.cnblogs.com/xinfan1/p/10870025.html
Copyright © 2011-2022 走看看