"""
什么xml
可扩展的标记语言
标记翻译为标签,用标签来组织数据的语言
也是一种语言,可以用来自定义文档结构
相比json 使用场景更加广泛,但是语法格式相比json 复杂很多
什么时候使用json
前后台交互数据时 使用json
什么时候使用xml
当需要自定义文档结构时 使用xml
比如java中经常用xml来作为配置文件
作为配置文件 常见操作就是通过程序去读取配置信息
而修改增加删除,一般是交给用户来手动完成
标签的叫法 node(节点) elment(元素) tag(标签)
"""
# 需求从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最强大的地方就是结构)
# 前后台交互不应该使用
代码生成xml文档:
import xml.etree.ElementTree as ET
# 创建根标签
root = ET.Element("root")
root.text = "这是一个XML文档!"
c = ET.Element("country",{"name":"china"})
root.append(c)
tree = ET.ElementTree(root)
# 参数: 文件名称 编码方式 是否需要文档声明
tree.write("new.xml",encoding="utf-8",xml_declaration=True)