XML 可扩展标记语言
格式:<></>
也是一种通用的数据格式
之所以用它是因为块平台性。
语法格式
一、任何的起始标签都必须有⼀一个结束标签。
<> </>
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标
签。这种语法是在⼤于符号之前紧跟一个斜线(/),XML
解析器会将其翻译成<百度百科词条></百度百科词条>。
例例如<百度百科词条/>。
三、标签必须按合适的顺序进⾏行行嵌套,所以结束标签必须按镜像顺序匹配
起始标签。这好⽐比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有
的内部括号之前,是不不能关闭外⾯面的括号的。
四、所有的特性都必须有值。
五、所有的特性都必须在值的周围加上双引号。
一个标签的组成部分:
<tagename 属性名="属性值">文本内容</tagename>
单标签的写法
<tagename 属性名 = "属性值"/>
镜像关闭顺序实例
<a> <b> <c> </c> </b> </a>
信息写成xml
<studentinfo> <张三> <age>20</age> <gender>man</gender> </张三> <李四> <age>20</age> <gender>man</gender> </李四> </studentinfo>
总结
xml也是一种中间格式,也是属于序列化方式之一。
与json相比较
同样数据 json会比xml更小,效率更高
xml需要根据文档结构手动解析,而json直接转对象。
d.xml
<?xml version="1.0" encoding="utf-8" ?> <studentinfo> <stu age="20" name="张三"> <girlfriend age="19" name="张三的女朋友" /> </stu> <stu age="20" name="李四"> <girlfriend age="19" name="李四的女朋友" /> </stu> </studentinfo>
解析xml
import xml.etree.ElementTree as ElementTree #解析d,xml tree = ElementTree.parse('d.xml') print(tree)#<xml.etree.ElementTree.ElementTree object at 0x0000000002429BA8> rootTree=tree.getroot()#获得根标签 print(rootTree)#<Element 'studentinfo' at 0x00000000023DBA48>
获得根标签下子标签三种方式:
iter("tagname")
# 种获取标签的方式 # 获取所有人的年龄 iter是用于在全文范围获取标签 for item in rootTree.iter("age"): print(item.tag) print(item.attrib) print(item.text)
结果
age
{'name': '1'}
age
{'name': '2'}
find()只是找到第一个标签
print(rootTree.find('age').attrib) #{'name': '1'}
findall()找到所有符合标签名
print(rootTree.findall('age').__iter__().__next__().attrib) #{'name': '1'}
获得单个属性
stu = rootTree.find("stu") print(stu.get("age")) print(stu.get("name"))
删除子标签
rootTree.remove(stu)
创建新的标签
new = ElementTree.Element('new_tag',{'属性名':111}) rootTree.append(new) tree.write('f.xml',encoding='utf-8')#写入文件