xml 和面向对象
xml
是一种定义电子文档结构和描述的语言,可以用来标记数据、定义数据类型
用户可以对自己的标记语言进行定义和扩展,由W3C(万维网标准组织)推出,几乎所有的编程语言都支持该格式
标记翻译为标签,标签指的是某种特殊符号,简单的说XML就是用标签来定义文档结构和数据
<person name="jack">hello i am a person</person>
一个完整的标签分为三个部分
标签名(tagname):
属性(attribute): name 值为jack
文本(text): hello i am a person
属性和文本都是可选的,所以你可以这样来定义一个空标签
<person></person>
其他格式要求:
一、任何的起始标签都必须有一个结束标签。
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<person/>。XML解析器会将其翻译成<person></person>。
三、标签必须按顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
五、所有的属性都必须在值的周围加上双引号。
六、最外层必须有且只能有一个标签,称为根标签
与JSON的对比
json是JavaScript语言的对象表示法,其仅支持js中的数据类型,(虽然大多数情况下是足够使用的),之所以出现是因为在开发中,通常都需要后台向前台传输数据,那自然是要传输前台能看懂的数据格式,json就是这样一种数据格式,可以轻松的被js语言解析,使用场景多为前后台交互
而xml支持的数据类型理论上是不受限制的,因为可以完全自定义标签的结构和含义,使用场景也非常广泛,不局限于前后台的数据交互,在一些语言中还经常作为配置文件来使用
另外,HTML 看起来与XML非常的类似,的确,HTML也属于XML
如果仅仅将XML用做数据交换格式的话,远不如json来的简单,由于出现时间的关系,有很多早期项目都是使用XML来完成的
xml 的一些函数,和使用方法
import xml.etree.ElementTree as ET # 读文件 tree = ET.parse("xmltest.xml") # 根节点 root_ele = tree.getroot() # 遍历下一级 for ele in root_ele: print(ele) # 全文搜索指定名的子标签,把所有的标签名都查找出来(范围为全文查找) ele.iter("标签名") # 非全文查找在当前标签下满足条件的第一个子标签 ele.find("标签名") # 非全文查找在当前标签下满足条件的所有子标签 ele.findall("标签名") # 标签名 ele.tag # 标签内容 ele.text # 标签属性 ele.attrib # 修改 ele.tag = "新标签名" ele.text = "新文本" ele.set("属性名", "新属性值") # 删除 sup_ele.remove(sub_ele) # 添加 my_ele=ET.Element('myEle') my_ele.text = 'new_ele' my_ele.attrib = {'name': 'my_ele'} root.append(my_ele) # 重新写入硬盘 tree.write("xmltest.xml") #创建一个xml tag = et.Element("data") tag.text = "1232" tag.set("name","jack") tree = et.ElenmentTree(tag) tree.write("test.xml")
面对对象的思想
定义一个类
class ClassName(): #类中的属性 name = "小李" age = 18
#类中的方法 def a(): pass
def b(): pass
获取类的对象是 user(对象名称) = ClassName() user 就是这个类的对象 user = ClassName()
#给对象添加属性 #比如给对象添加一个username 这个属性 user.username = "张三" #这个添加的属性是不会出现在ClassName 这个类中的 user.name #---> 可以获取值 ClassName.username #获取不出这个属性的. #因为创建的对象的名称空间和类的名称空间是不同的,我们添加的属性是在对象的名称空间中,所以类访问不了. #然而对象中没有的属性,类中有,那么对象是可以访问的,因为类中的属性都对对象共享所以能访问,这个就像是全局变量和局部变量一样
一、面向过程的思想和面向对象的思想
面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。
面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。
二、简单理解面向对象
就是在程序里面首先分解出来的应该是注意不再是一步一步的过程了,而是首先考虑在这个问题域里面或者程序里面应该具有有哪些对象,所以从现在开始考虑任何问题脑子里不要再想着我实现这件事我第一步应该干什么,第二步应该干什么,如果这样想,那就是面向过程的思维了。面向对象的思维是,当我碰到这个问题域的时候,碰到这个程序的时候,我首先应该把这个问题里有哪些对象,对象与对象之间有什么关系抽象出来。