XML概述
XML 指可扩展标记语言(eXtensible Markup Language)
XML 被设计用来传输和存储数据。
XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML语法规则
XML树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素都可以有子元素
<root> #根元素
<child> #子元素
<subchild>.....</subchild>
</child>
</root>
XML元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含
- 子元素
- 属性
- 文本
<元素名 属性="value">text</元素名>
元素的基本语法
- 所有的 XML 元素都必须有一个关闭标签
- XML 标签对大小写敏感
- XML 必须正确嵌套
- XML 属性值必须加引号
一个简单的XML文件
xmltest.xml
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上面的实例中, 和 都有 元素内容,因为他们包含其他元素。 元素也有属性(category=“CHILDREN”)。
XML模块常用函数
XML解析
ElementTree.XML(str)
from xml.etree import ElementTree as ET
with open("data.xml",'r') as file:
#将xml文档中内容读取到strXml中
strXml =file.read()
#XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
root=ET.XML(strXml)
print(type(root))
ElementTree.parse("file_path")
#打开xml文件并且解析,返回一个xml.etree.ElementTree.ElementTree对象
tree=ET.parse("data.xml")
#获取xml的根节点
root=tree.getroot() #获取根元素对象
print(root.tag)
遍历指定的元素(查)
元素对象.iter("元素名")
在根据节点名称寻找所有指定的节点,并返回一个迭代器元素对象.items()
获取节点中所有属性的键值对元素对象.keys()
获取节点中属性的键
import xml.etree.ElementTree as ET
tree = ET.parse("xmltest")
root = tree.getroot()
for value in root.iter("uid"): #找到根元素中的所有uid元素并遍历返回一个迭代器
print(value.tag,value.text,value.attrib) #tag是获取元素名,text是获取文本内容,attrib是属性值
修改,删除指定元素(改)
元素对象.find("元素名")
获取第一个寻找到的子节点元素对象.findall("元素名")
获取所有的子节点,并返回包含元素对象的列表元素对象.set(“属性1”,"value1")
为指定元素添加属性元素对象.remove("元素名")
删除节点中的元素xml对象.write("file.xml")
将XML对象写入一个新的文件中
import xml.etree.ElementTree as ET
tree = ET.parse("xmltest")
root = tree.getroot()
for node in root:
for value in node.iter('year'):
new_year = int(value.text) + 2
value.text = str(new_year)
value.set("update","yes") #添加属性值update=“yes”
tree.write("xml_update.xml")
创建xml文档
from xml.etree import ElementTree as ET
#创建根节点,并使用键值对的方式添加属性
root=ET.Element("home",{"name":"root"})
#创建子节点,也可以用下面的方式创建,但只是创建,还没有加到任何节点下面
#sub=root.makeelement("son",{"sonName":"haha"}),下面同样可以
sub=ET.Element("son",{"sonName":"haha"})
subsub=ET.Element("subson",{"subsonName":"xixi"})
root.append(sub) #添加子节点
sub.append(subsub)
tree=ET.ElementTree(root) #创建一个xml对象
tree.write("createXml.xml")
#####结果是没有锁进的####
<home name="root">
<son subName="haha">
<son subName="haha" />
</son>
</home>