一. XML 模块
是一种定义电子文档结构和描述的语言,可以标记数据,定义数据类型
标记翻译为标签,标签是指某种特殊符号,XML是用标签来定义文档结构
标签的组成:<person name='egon'> hello my friend</person>
1. 标签名: person
2. 属性(attribute): name='egon'
3. 文本(text):hello my friend
空标签: <person></person> 或 <person/>
标签格式要求:
1. 任何的起始标签都必须有一个结束标签
2.标签必须按顺序嵌套,结束标签必须按镜像顺序匹配起始标签
3.所有属性都必须有值
4.属性的值必须加双引号
5. 最外层为根标签,只能有一个根标签
解析 xml:
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <neighbor name="Malaysia" direction="N"/> </data>
import xml.etree.ElementTree as ET
# 先用.parser 解析文档,类似读取文档
tree=ET.parser('xmltest.xml')
root=tree.getroot() # 获得根标签
# 遍历xml文档
for child in root:
for son in child:
print(son.tag) # rank
print(son.attrib) #字典{'updated': 'yes'}
print(son.text) #2
# 只遍历year节点
for node in root.iter():
print(node) # 打印全部标签,全文搜索
for node in root.iter('year'): # 将全文的'year'搜索出来
print(node.tag)
print(node.text)
--------------------------------------------------------------------
import xml.etree.ElementTree as ET
tree=ET.parser('file.xml')
root=tree.getroot()
总结:
查找标签函数: iter('标签名‘) # 全文查找
find('标签名’) #查找子节点匹配的第一个
findall('标签名‘)# 查找子节点匹配的所有
访问标签的内容
element.tag 获取标签名
element.attrib 获取属性
element.text 获取文本
修改文档内容:
element.tag='标签名‘
element.attrib='文本’
element.set('属性名‘,’属性值‘)
删除节点:
root.remove('标签对象’)
添加子标签:
year2=ET.Element('year2') # 指定名称
year2.text='新年'
year2.attrib={'update':'yes'}
country.append(year2) 在country节点下添加子节点
写入文件:
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) # 打印生成的格式
与JSON 对比:
json是一种数据格式,使用场景多维前后台交互
xml 支持的数据类型理论上不收显示,完全可以自定义标签的结构和含义。在一些语言中经常作为配置文件来使用