常用模块——xml模块

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')#写入文件

猜你喜欢

转载自www.cnblogs.com/msj513/p/9806364.html