> 文章列表 > 【python】XML格式文件读写详解

【python】XML格式文件读写详解

【python】XML格式文件读写详解

注:最后有面试挑战,看看自己掌握了吗

文章目录

  • XML介绍
    • 格式
  • XML与AJAX与HTML区别联系
  • 生成XML文件案例
  • 用SAX模块处理XML
  • 用DOM模块处理XML

🌸I could be bounded in a nutshell and count myself a king of infinite space.
 特别鸣谢:木芯工作室
特别鸣谢:木芯工作室 、Ivan from Russia


XML介绍

xmlextensible markup language可扩展标记语言
是另外一种带格式标准的标记语言
可以用来 以文件形式共享处理数据
它定义了一组规则,用以以人类可读和机器可读的格式对文档进行编码
他非常适合万维网传输
提供统一方法来表述和交换独立于应用程序或供应商的结构化数据

是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具

XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点,
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

格式

可扩展标记语言与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,可扩展标记语言仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:可扩展标记语言极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。
XML的简单易于在任何应用程序中读/写数据,这使XML很快成为数据交换语言(此类语言主要包括XML,JSON等,常用于接口调用,配置文件,数据存储等场景 ),虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果

【python】XML格式文件读写详解
【python】XML格式文件读写详解
【python】XML格式文件读写详解

XML与AJAX与HTML区别联系

1、AJAX 全称Asynchronous Javascript And XML 就是异步js和XML。通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据

2、XML (Extensible Maekup Language)可扩展标记语言 被设计用来传输和存储数据,和HTML类似,不同的是HTML都是预定义标签,而XML没有预定义标签。 它们两者之间没有任何的关系。

HTML被设计用来描述网页上的内容,是网页内容的载体
XML被设计用来传输和存储数据,是数据的载体
【python】XML格式文件读写详解
【python】XML格式文件读写详解
Ajax接收返回的XML文档(script)

生成XML文件案例

# coding=gbk
import sys
class BuildNewXML():def __init__(self,filename=None):self.filename = filenameself.__get_f = None     #自定义隐含属性---在类的内部使用def openfile(self):if self.filename ==None:print("没提供文件名字")return Falsetry:self.__get_f = open(self.filename,'a',encoding='utf-8')except:print('没打开')return Falsedef writeXML(self,n,element):try:if n==0:self.__get_f.write(element+'\\n')# 根元素写入else:self.__get_f.write(' '*n+element+'\\n')# 子元素写入except:print("xie%scuole%s"%(self.filename,element))def closeXML(self):if self.__get_f:self.__get_f.close()
#==================
filename = "storehouse.xml"
flag = False
content = {1:[0,'<storehouse>'],2:[4,'<goods category="fish">'],3:[8,'<title>淡水鱼</title>'],4:[8,'<name>鲫鱼</name>'],5: [4, '<amount>18</amount>'],6: [8, '<price>8</price>'],7: [4, '</goods>'],8: [4, '<goods category="fruit">'],9: [8, '<title>温带水果</title>'],10: [8, '<name>猕猴桃</name>'],11: [8, '<amount>10</amount>'],12: [8, '<price>10</price>'],13: [4, '</goods>'],14:[0,'</storehouse>'],}
build_xml=BuildNewXML(filename)
try:build_xml.openfile()#print(content.items())for get_item in content.items():#print(get_item)#print(get_item[0])#print(get_item[1])#print(get_item[1][0],get_item[1][1]+'\\n')build_xml.writeXML(get_item[1][0],get_item[1][1])# 写入xml文件flag = True
except:print("!!!chucuo")sys.exit()
finally:if flag:build_xml.closeXML()print('xie%swancheng'%(filename))

用SAX模块处理XML

sax=simple API for XML --------XML的简单处理API
通过在解析XML过程中触发一个个的事件 并且调用用户定义的回调函数来处理XML文件
当文件很大的时候非常方便,从磁盘读取数据的时候只读取需要部分的内容
避免把整个文件内容从磁盘读入内存

用DOM模块处理XML

dom —document object model -------文件对象模型
整个文件被读入内存并分层(基于树)的形式存储,以表示xml文档的所有特征
处理大文件的时候更快