xml的文件格式:
<?xml version="1.0" encoding="utf-8"?>
<userdata createuser="false">userdata内容
<dataconnection>
<server>localhost</server>
<uid>sa</uid>
<pwd></pwd>
</dataconnection>
<net>
<name>jiayuan</name>
</net>
</userdata>
xml中节点Element类的函数
1 tag 当前节点标签名
2 attrib 当前节点属性
3 text 当前节点内容
4 append 添加一个子节点
5 clear 清空节点
6 extend 为当前节点添加 n 个子节点
7 find 获取第一个寻找到的子节点
8 findall 获取所有的子节点
9 findtext 获取第一个寻找到的子节点的内容
10 get 获取当前节点的属性
11 insert 在当前节点创建子节点,然后插入指定位置
12 items 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
13 iter 在根据节点名称寻找所有指定的节点,并返回一个迭代器
14 iterfind 获取所有指定的节点,并放在一个迭代器中
15 itertext 在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
16 keys 获取当前节点的所有属性的 key
17 makeelement 创建一个新节点
18 remove 删除某个节点
19 set 设置当前节点属性
xml解析
1.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))
2.ElementTree.parse(“file_path”)函数
from xml.etree import ElementTree
#打开xml文件并且解析,返回一个xml.etree.ElementTree.ElementTree对象
tree=ElementTree.parse("data.xml")
#获取xml的根节点
root=tree.getroot()
print(root.tag)
遍历指定的节点
from xml.etree import ElementTree
with open("data.xml",'r',encoding="utf-8") as file:
#将xml文档中内容读取到strXml中
strXml =file.read()
#XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
root=ElementTree.XML(strXml)
for value in root.iter("uid"):
print(value.tag,value.text)#打印uid的标签,打印uid的内容
修改节点的内容并保存
#修改并保存
from xml.etree import ElementTree
with open("data.xml",'r',encoding="utf-8") as file:
#将xml文档中内容读取到strXml中
strXml =file.read()
#XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
root=ElementTree.XML(strXml)
node=root.find("dataconnection")
print(node)
node.set("name","hello,xml")#把dataconnection的name设置成hello,xml
#利用ET.XML这种方法打开XML的话不能直接保存,需要借助ET.ElementTree
#如果使用的ET.parse(filePath)打开的话,就不需要额外的创建一个ElementTree对象
tree=ElementTree.ElementTree(root)
tree.write("data.xml",encoding="utf-8")
#删除节点并保存
from xml.etree import ElementTree
with open("data.xml",'r',encoding="utf-8") as file:
#将xml文档中内容读取到strXml中
strXml =file.read()
#XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
root=ElementTree.XML(strXml)
node=root.find("dataconnection")
root.remove(node)
#利用ET.XML这种方法打开XML的话不能直接保存,需要借助ET.ElementTree
#如果使用的ET.parse(filePath)打开的话,就不需要额外的创建一个ElementTree对象
tree=ElementTree.ElementTree(root)
tree.write("data.xml",encoding="utf-8")
创建xml文档
实例1:
from xml.etree import ElementTree
#创建根节点
root=ElementTree.Element("home",{"name":"root"})
#创建子节点,也可以用下面的方式创建,但只是创建,还没有加到任何节点下面
#sub=root.makeelement("son",{"sonName":"haha"}),下面同样可以
sub=ElementTree.Element("son",{"sonName":"haha"})
subsub=ElementTree.Element("subson",{"subsonName":"xixi"})
root.append(sub)
sub.append(subsub)
tree=ElementTree.ElementTree(root)
tree.write("createXml.xml")
###########结果(实际上是没有缩进的)############
<home name="root">
<son sonName="haha">
<subson subsonName="xixi" />
</son>
</home>
实例2:
from xml.etree import ElementTree
root=ElementTree.Element("home",{"name":"root"})
#创建节点并添加到第一个参数的节点下面
sub=ElementTree.SubElement(root,"son",{"subName":"haha"})
subsub=ElementTree.SubElement(sub,"son",{"subName":"haha"})
tree=ElementTree.ElementTree(root)
tree.write("createXml2.xml")
#########结果(结果实际上没有缩进)###########
<home name="root">
<son subName="haha">
<son subName="haha" />
</son>
</home>
增加缩进
from xml.etree import ElementTree as ET
from xml.dom import minidom
def prettify(elem):
"""
将节点转换成字符串,并添加缩进
"""
#返回该对象的字符串表示
rough_string = ET.tostring(elem, 'utf-8')
print(type(rough_string))
#从xml字符串得到dom对象
reparsed = minidom.parseString(rough_string)
print(type(reparsed))
return reparsed.toprettyxml(indent="\t")
root=ET.Element("home",{"name":"root"})
#创建节点并添加到第一个参数的节点下面
sub=ET.SubElement(root,"son",{"subName":"haha"})
subsub=ET.SubElement(sub,"son",{"subName":"haha"})
newStr=prettify(root)
file=open("createXml3.xml","w",encoding="utf-8")
file.write(newStr)
file.close()
利用xml.dom.minidom增加缩进
命名空间的使用
from xml.etree import ElementTree
#注册命名空间
ElementTree.register_namespace("baidu","http://baidu.com")
#添加根目录
root=ElementTree.Element("{http://baidu.com}home",{"name":"root"})
#创建节点并添加到第一个参数的节点下面
sub=ElementTree.SubElement(root,"{http://baidu.com}son",{"{http://baidu.com}subName":"haha"})
subsub=ElementTree.SubElement(sub,"{http://baidu.com}son",{"{http://baidu.com}subName":"xixi"})
tree=ElementTree.ElementTree(root)
tree.write("createXml4.xml")
###########结果(实际中没有缩进)##############
<baidu:home xmlns:baidu="http://baidu.com" name="root">
<baidu:son baidu:subName="haha">
<baidu:son baidu:subName="xixi" />
</baidu:son>
</baidu:home>