python操作XML格式文件的常见方法实例分析
导读:本文共5088.5字符,通常情况下阅读需要17分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 前言可扩展标记语言,是一种简单的数据存储语言,XML被设计用来传输和存储数据存储,可用来存放配置文件,例:java配置文件传输,网络传输以这种格式存在,例:早期ajax传输数据等<data><countryname="Liechtenstein"><rankupdated="yes">... ...
目录
(为您整理了一些要点),点击可以直达。前言
可扩展标记语言,是一种简单的数据存储语言,XML被设计用来传输和存储数据
存储,可用来存放配置文件,例:java配置文件
传输,网络传输以这种格式存在,例:早期ajax传输数据等
<data><countryname="Liechtenstein"><rankupdated="yes">2</rank><year>2023</year><gdppc>141100</gdppc><neighbordirection="E"name="Austria"/><neighbordirection="W"name="Switzerland"/></country><countryname="Singapore"><rankupdated="yes">5</rank><year>2026</year><gdppc>59900</gdppc><neighbordirection="N"name="Malaysia"/></country><countryname="Panama"><rankupdated="yes">69</rank><year>2026</year><gdppc>13600</gdppc><neighbordirection="W"name="CostaRica"/><neighbordirection="E"name="Colombia"/></country></data>
1. 读取文件和内容
#导包fromxml.etreeimportElementTreeasET#ET去打开xml文件tree=ET.parse("files/xo.xml")#获取根标签root=tree.getroot()print(root)#<Element'data'at0x7f94e02763b0>
2.读取节点数据
获取根标签
root=ET.XML(content)
查找节点【默认找第一个】 find()
country_object=root.find("country")print(country_object)#<Element'country'at0x0000020D57DFB220>
获取节点标签 tag
country_object.tag#country
获取节点属性 attrib
country_object.attrib#{'name':'Liechtenstein'}
获取节点文本 text
gdppc_object.text#141100
循环节点
#获取data标签的孩子标签forchildinroot:print(child.tag,child.attrib)#获取child标签的孩子标签fornodeinchild:print(node.tag,node.attrib,node.text)
查找所有标签 iter()
#获取data里面所有year标签forchildinroot.iter('year'):print(child.tag,child.text)
查找所有标签 findall()
#查找所有的country标签v1=root.findall('country')
查找标签
#查找country里面的rank标签,找第一个v2=root.find('country').find('rank')
3.修改和删除节点
【修改和删除内容只在内存中修改,没有存到文件中,都要重新保存文件】
修改节点内容
#修改rank文本rank.text="999"tree=ET.ElementTree(root)tree.write("new.xml",encoding='utf-8')
修改节点属性
#修改rank属性rank.set('update','2020-11-11')tree=ET.ElementTree(root)tree.write("new.xml",encoding='utf-8')
保存文件
tree=ET.ElementTree(root)tree.write("new.xml",encoding='utf-8')
删除节点
root.remove(root.find('country'))tree=ET.ElementTree(root)tree.write("new.xml",encoding='utf-8')
4.构建文档 方式一ET.Element()
<home><sonname="儿1"><grandsonname="儿11"></grandson><grandsonname="儿12"></grandson></son><sonname="儿2"></son></home>
fromxml.etreeimportElementTreeasET#创建根标签root=ET.Element('home')#创建大儿子,与root还没有关系son1=ET.Element('son',{'name':'儿1'})#创建小儿子,与root还没有关系son2=ET.Element('son',{'name':'儿2'})#创建2个孙子grandson1=ET.Element('grandson',{'name':'儿11'})grandson2=ET.Element('grandson',{'name':'儿12'})#创建两个孙子,与son1还没有关系son1.append(grandson1)son1.append(grandson2)#把儿子添加到根节点root.append(son1)root.append(son2)#root节点放到根节点中tree=ET.ElementTree(root)#保存xml文件#short_empty_elements=True,节点中没有元素,用简写方式显示例:<grandsonname="儿11"/>tree.write('file/root.xml',encoding='utf-8',short_empty_elements=True)
方式二 标签.makeelement()
<famliy><sonname="儿1"><grandsonname="儿11"></grandson><grandsonname="儿12"></grandson></son><sonname="儿2"></son></famliy>
fromxml.etreeimportElementTreeasET#创建根节点root=ET.Element("famliy")#创建大儿子,与root还没有关系son1=root.makeelement('son',{'name':'儿1'})#创建小儿子,与root还没有关系son2=root.makeelement('son',{"name":'儿2'})#创建两个孙子,与son1还没有关系grandson1=son1.makeelement('grandson',{'name':'儿11'})grandson2=son1.makeelement('grandson',{'name':'儿12'})son1.append(grandson1)son1.append(grandson2)#把儿子添加到根节点中root.append(son1)root.append(son2)tree=ET.ElementTree(root)tree.write('oooo.xml',encoding='utf-8')
方式三 标签.SubElement(),创建标签的子标签
<famliy> <sonname="儿1"> <agename="儿11">孙子</age></son> <sonname="儿2"></son></famliy>
fromxml.etreeimportElementTreeasET#创建根节点root=ET.Element("famliy")#创建root节点的子标签大儿子son1=ET.SubElement(root,"son",attrib={'name':'儿1'})#创建root节点的子标签小儿子son2=ET.SubElement(root,"son",attrib={"name":"儿2"})#在大儿子中创建一个孙子grandson1=ET.SubElement(son1,"age",attrib={'name':'儿11'})grandson1.text='孙子'et=ET.ElementTree(root)#生成文档对象et.write("test.xml",encoding="utf-8")
方式四
<user><![CDATA[你好呀]]</user>
fromxml.etreeimportElementTreeasET#创建根节点root=ET.Element("user")#<![CDATA[你好呀]]直接添加到文本里root.text="<![CDATA[你好呀]]"et=ET.ElementTree(root)#生成文档对象et.write("test.xml",encoding="utf-8")
补充:XML文件和JSON文件互转
记录工作中常用的一个小技巧
cmd控制台安装第三方模块:
pipinstallxmltodict
1、XML文件转为JSON文件
新建一个1.xml文件:
<notedate="23/04/2022"><to>tom</to><from>mary</from><msg>love</msg></note>
转换代码实现:
importjsonimportxmltodictdefxml_to_json(xml_str):"""parse是的xml解析器,参数需要:paramxml_str:xml字符串:return:json字符串"""xml_parse=xmltodict.parse(xml_str)#json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。#dumps()方法的ident=1,格式化jsonjson_str=json.dumps(xml_parse,indent=1)returnjson_strXML_PATH='./1.xml'#xml文件的路径withopen(XML_PATH,'r')asf:xmlfile=f.read()withopen(XML_PATH[:-3]+'json','w')asnewfile:newfile.write(xml_to_json(xmlfile))
输出结果(生成json文件):
2、JSON文件转换为XML文件
新建test.json文件:
{"student":{"course":{"name":"math","score":"90"},"info":{"sex":"male","name":"name"},"stid":"10213"}}
转换代码实现:
importxmltodictimportjsondefjson_to_xml(python_dict):"""xmltodict库的unparse()json转xml:parampython_dict:python的字典对象:return:xml字符串"""xml_str=xmltodict.unparse(python_dict)returnxml_strJSON_PATH='./test.json'#json文件的路径withopen(JSON_PATH,'r')asf:jsonfile=f.read()python_dict=json.loads(jsonfile)#将json字符串转换为python字典对象withopen(JSON_PATH[:-4]+'xml','w')asnewfile:newfile.write(json_to_xml(python_dict))
输出结果(生成xml文件):
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
python操作XML格式文件的常见方法实例分析的详细内容,希望对您有所帮助,信息来源于网络。