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

news2024/11/16 10:45:18

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

文章目录

  • 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格式输出结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

XML与AJAX与HTML区别联系

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

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

HTML被设计用来描述网页上的内容,是网页内容的载体
XML被设计用来传输和存储数据,是数据的载体
在这里插入图片描述
在这里插入图片描述
Ajax接收返回的XML文档(script)

生成XML文件案例

# coding=gbk
import sys
class BuildNewXML():
    def __init__(self,filename=None):
        self.filename = filename
        self.__get_f = None     #自定义隐含属性---在类的内部使用
    def openfile(self):
        if self.filename ==None:
            print("没提供文件名字")
            return False
        try:
            self.__get_f = open(self.filename,'a',encoding='utf-8')
        except:
            print('没打开')
            return False
    def 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文档的所有特征
处理大文件的时候更快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三:BLE协议架构简介

低功耗蓝牙体系整体架构说明1. PHY(物理层)2. LL(链路层)3. HCI(主机与控制器通信接口)4. L2CAP(逻辑链路控制及适配协议)5. ATT(属性协议)6. GATT(通用属性规范)7. GAP(通用访问规范)8. SM(安全管理)整体架构说明 架构层说明PHY1. 物理层2. 控制射频的发送和接收LL1. 链路层2.…

Java开发 - Quartz初体验

前言 在上一篇博客中&#xff0c;我们对单点登录有了初步了解&#xff0c;这也让我们独立做系统有了最基础的保障。但在业务开发中&#xff0c;总是会出现一些定期处理的任务&#xff0c;我们首先想到的是Timer&#xff0c;但由于其调度功能单一&#xff0c;我们实际并不会用它…

sqlmap工具说明

目录 1 工具简介 3 1.1 简述 3 1.2 背景及需求 3 1.3 主要功能 3 2 功能确认 4 2.1 安装和使用 4 2.1.1 Windows操作系统 4 2.1.2 Linux操作系统 6 2.1.3 Kali 7 2.2 添加目标 7 2.2.1 参数-u 7 2.2.2 参数-m 8 2.2.3 参数-r 9 2.3 指定参数 11 2.4 爆破数据库 11 2.5 爆破表 …

【LeetCode】剑指 Offer(16)

目录 题目&#xff1a;剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer …

Uipath DataTable-Build Data Table(构建数据表)

Build Data Table(构建数据表) 活动描述 Build Data Table(构建数据表)&#xff1a;通过在“构建数据表向导”窗口可以构建数据表。 使用如下图&#xff1a; Build Data Table(构建数据表)属性配置 属性 作用 DisplayName 在设计器面板中设置活动显示的名称 Private 如…

List、Set、Map众多集合框架等你来学,让我们一起精进Java框架的知识点吧

文章目录一、各集合特性二、HashMap深入解析三、遍历集合元素的若干方式一、各集合特性 1. ArrayList特性 不唯一&#xff0c;有序&#xff1a;实现了List接口&#xff0c;该接口是序列&#xff0c;所以不唯一且按顺序保存不同步&#xff1a;因为ArrayList.add&#xff08;&am…

Java 编写Vue组件(VueGWT的初尝试)

在之前&#xff0c;我曾写过这样的文章《不会前端没事&#xff0c;用GWT Boot和Spring Boot构建Web程序》&#xff0c;这篇文字使用的Domino UI来做前端页面&#xff0c;由于现在更流行VUE&#xff0c;并且VUE的页面更具现代化&#xff0c;所以我尝试了一下VueGWT。 VueGWT 有…

Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported

前言 前端项目使用( npm run dev ) 运行vue项目时&#xff0c;出现错误&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 经过探索&#xff0c;发现问题所在&#xff0c;主要是nodeJs V17版本发布了OpenSSL3.0对算法和秘钥大小增加了更为严格的限制…

xFormers安装使用

xFormers是一个模块化和可编程的Transformer建模库&#xff0c;可以加速图像的生成。 这种优化仅适用于nvidia gpus&#xff0c;它加快了图像生成&#xff0c;并降低了vram的使用量&#xff0c;而成本产生了非确定性的结果。 下载地址&#xff1a; https://github.com/faceb…

C++ | 你真的了解namespace吗?

文章目录一、前言二、命名冲突三、命名空间1、域作用限定符2、命名空间的概念&#x1f449;示例1&#x1f449;示例23、命名空间的定义4、命名空间的使用① 指定命名空间访问【做项目】② 使用using部分展开【做项目】③ 使用using namespace全局展开【日常练习】5、小结解答&a…

【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本

使用了6年的实时操作系统&#xff0c;是时候梳理一下它的知识点了 摘要&#xff1a; 本文简单介绍了博主学习操作系统的心路历程&#xff0c;同时还给大家总结了一下当下流行的几种实时操作系统&#xff0c;以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 文章目录…

【开放域目标检测】一:Open-Vocabulary Object Detection Using Captions论文讲解

出发点是制定一种更加通用的目标检测问题&#xff0c;目的是借助于大量的image-caption数据来覆盖更多的object concept&#xff0c;使得object detection不再受限于带标注数据的少数类别&#xff0c;从而实现更加泛化的object detection&#xff0c;识别出更多novel的物体类别…

【数据结构】顺序表:尾部操作我很行,随机访问我超快!!!

顺序表的模拟实现 文章目录顺序表的模拟实现1.线性表2.顺序表2.1概念结构2.2顺序表的模拟实现2.2.1顺序表的初始化2.2.2顺序表的销毁2.2.3尾插数据2.2.4尾删数据2.2.5头插数据2.2.6头删数据2.2.7中间插入数据2.2.8中间删除数据2.2.9打印顺序表2.2.10查找数据2.2.11复用Insert和…

Linux学习第二十一节-sudo提权

1.概念 管理员提前为用户设置执行权限许可&#xff1b; 被授权用户有权执行授权命令&#xff1b; 配置文件&#xff1a;/etc/sudoers&#xff1b; 命令格式&#xff1a;sudo 特权命令。 2.提权操作 ①方式一vim编辑配置文件后wq&#xff01;&#xff1a;#vim /etc/sudo…

pnpm 基本详细使用(安装、卸载、使用)

一、简介 官网地址、GitHub地址、官方安装文档、官方卸载文档。 pnpm 全称 performant npm&#xff0c;意思为 高性能的 npm。pnpm 由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的 bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为 最先进的…

【Docker】之docker-compose的介绍与命令的使用

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录docker-compose简介docker-compose基础…

Word文档的密码忘记了怎么办?

Word文档可以设置两种密码&#xff0c;文件的“限制密码”和“打开密码”&#xff0c;今天来分享一下忘记这两种密码可以如何处理。 如果忘记的是Word文档的“限制密码”&#xff0c;文档就无法编辑及更改了&#xff0c;菜单目录中的相关选项也都是灰色状态&#xff0c;无法点…

LeetCode-343. 整数拆分

目录递归动态规划题目来源 343. 整数拆分 递归 对于给定的一个整数 n&#xff0c;穷举它的每一种分解情况&#xff0c;然后对所有情况&#xff0c;求最大值。 并且我们知道&#xff0c;n 可以拆成如下情况&#xff1a; 通过上图&#xff0c;我们很容易得到一个递归表达式&am…

Verilog使用always块实现时序逻辑

这篇文章将讨论 verilog 中一个重要的结构---- always 块&#xff08;always block&#xff09;。verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。与组合逻辑电路相反&#xff0c;时序电路电路使用时钟并一定需要触发器等存储元件。因此&#xff0c…

用Chrome浏览器加入新必应候补名单,微软最终还是无法赢得一切(~ ̄▽ ̄)~

前言 ChatGPT最近太火了&#xff0c;国内厂商刚开始宣布跟进时&#xff0c;微软必应搜索直接接入了ChatGPT的能力&#xff0c;推出了新必应。此举给Google当头一棒&#xff0c;相比于传统搜索引擎&#xff0c;新必应的这种搜索方式&#xff0c;让用户更快速的获取到自己问题的…