Dom解析与Sax解析的区别

news/2024/11/20 7:27:25/

1.Dom解析:

Dom解析的时候,首先要把整个文件读取完毕,装载到内存中。然后进行解析,在解析的过程中,你可以直接获取某个节点,进行操作,也可以获取根节点然后进行遍历操作,得到所有的节点。

优点:易用性强,使用Dom时,将把所有的XML文档信息都存于文档中,并且遍历简单,增强了易用性。

缺点:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用Dom进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样Dom机制中所运用的大量对象的创建和销毁无疑会影响其效率。

下图是在进行Dom解析时Node节点的类型,共有12种,以下是前三种。

 

2.Sax解析

   Sax解析时不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。

优点:内存消耗小,因为整个文档无需一次加载到内存中,这使Sax解析器可以解析大于系统内存的文档。

缺点:必须实现多个时间处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为Sax解析器不能交流元信息,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑也越复杂。

3.区别

①读取方式:Dom需要把所有的XML文档信息都存于内存中。

                        Sax无需一次把xml文件加载到内存中,采用的是事件驱动的操作。

②应用场景:Dom几乎不可以使用于大的文件

                        Sax则视情况而定

③获取节点:Dom可以直接获取

document.getElementById(elementId)

document.getElementsByTagName(tagname)

document.getElementsByTagNameNS(namespaceURI, localName)

Sax需要处理所有到来的事


http://www.ppmy.cn/news/98496.html

相关文章

Linux 系统编程:内存管理系统调用的深度解析

Linux 系统编程:内存管理系统调用的深度解析 一、引言 (Introduction)1.1 Linux 系统编程概述 (Overview of Linux System Programming)1.2 内存管理的重要性 (Importance of Memory Management)1.3 系统调用的作用 (Role of System Calls) 二、Linux 内存管理基础 …

Allegro操作规范

光绘输出操作规范 1.1添加钻孔表 添加钻孔表的具体步骤为: 1.通过屏幕右边的Visibility选项的Views列表,将Drill层打开 2.将Visibility选项中的PIN和Via选项都选中,见下图所示: 1.2添加钻孔文件 参数设好之后关闭NC Drill/Parameters窗口,输出数控机床钻孔文件的命…

接口自动化一键集成,Jenkins持续集成Allure报告!

目录 前言: 一、接口测试框架选型 二、接口自动化框架封装的设计 2.1 创建测试用例 2.2 执行测试用例 2.3 生成测试报告 三、 实现Jenkins持续集成 3.1 安装Jenkins 3.2 配置Jenkins 3.3 创建Jenkins任务 四、总结 前言: 接口测试作为软件测试中的…

基于Open3D的点云处理4-数据结构Kdtree和Octree

Kdtree Kdtree是一种划分k维数据空间的数据结构,本质也是一颗二叉树,只不过每个节点的数据都是k维,当k1时,就是普通二叉树。 建立Kdtree实际上是一个不断划分的过程,首先选择最sparse的维度(一般通过计算…

分布式网络通信框架(一)——集群和分布式

单机聊天服务器 缺点: 受限于硬件资源,服务器所能承受的用户并发量不够大; 任意模块修改,都会导致整个项目代码重新编译、部署; 系统中,有些模块是CPU密集型,有些是IO密集型,造成…

vscode配置flutter开发环境,不需要安装第三方安卓模拟器

1.获取Flutter SDK 点击下方的安装包,获取 stable 发行通道的 Flutter SDK 最新版本:Flutter SDK 将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中**(注意不要出现中文目录)** 配置Wi…

【论文阅读】Densenet:Densely Connected Convolutional Networks 密集连接的卷积网络

文章目录 前言一、摘要二、网络架构2.1. densenet2.2. dense block2.3 与resnet对比2.4 pytorch代码 三.实验结果四.结论 前言 从今天开始总结一下之前看的一些深度学习相关的论文。 今天的这篇还是比较经典的论文:密集连接网络。在很多国内的硕士毕业论文里都出现…

ubuntu下搭建opencv环境

一、完全卸载opencv 1. 先到opencv编译安装的目录下 sudo make uninstall cd .. sudo rm -r build 2.上面最后一行命令有的文件夹不存在会有提示,但是不影响,只要把已安装的opencv的include和lib删掉就行,也可以手动删除,总之删…