JAVA之DOM和SAX解析器

xml的解析器:
DOM解析:Document Object Module 文档对象模型
SAX解析:Simple API for XML 用于对 XML 进行语法分析的事件驱动的简单 API

JAXP:Java API for XML Processing,
用于XML文档处理的使用Java语言编写的编程接口。
不提供语法分析功能,却提供到达这些语法分析器和结果的方式。
(标准和规范)

DOM解析:文档对象模型
一次性读入内存,形成树状结构
可以反复频繁访问
不适合操作大的xml文件

DOM解析的API:
Node :文档树中的单个节点
Document:表示整个 HTML 或 XML 文档
Element:表示 HTML 或 XML 文档中的一个元素
NodeList:文档树中的一组节点

得到Document对象:
1.创建解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.通过解析器工厂创建解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
3.解析xml文件,得到Document对象
Document document=builder.parse(String path);

NodeList类常用方法:
int getLength():列表中的节点数。
Node item(int index): 返回集合中的第 index 个项。

Document类生成xml文档常用方法:
createElement()创建DOM节点

createAttribute()创建节点属性

setTextContent() 设置节点文本

appendChild()添加子节点

DOM解析:
优点:常驻内存,对于提高应用程序频繁访问,提高效率
缺点:当xml文件非常复杂的时候,占用太多的内存空间

-----------------------------------------------------------------
SAX解析:事件驱动,顺序解析

步骤:
1.创建解析器工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
2.通过解析器工厂创建解析器对象
SAXParser parser=factory.newSAXParser();
3.解析xml文件 需要传入xml文件对象,和继承DefaultHandler类的子类 重写了读取xml信息的方法

parser.parse(String path,new MyDefaultHandler());

DefaultHandler的方法 这些方法都没有实现 需要继承之后 按照自己的需求实现:
startDocument() 文档起始位置
startElement() 元素起始位置:通过该方法的 qName参数得到元素名
characters() 文本元素:根据参数ch字符数组和int start,int length 索引和长度构造一个string 对象 就是元素的文本内容
endElement() 元素结束位置
endDocument() 文档结束位置

原文地址:https://www.cnblogs.com/java888/p/10430813.html

时间: 2024-11-09 18:13:04

JAVA之DOM和SAX解析器的相关文章

Java SE之XML<二>XML DOM与SAX解析

[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(Document Object Model): 特点:树状解析 优点:[更适合对XML文档的(crud)操作.]对XML文档增删改查操作很方便灵活 缺点:内存消耗很大,不适合数据量很大,节点很多的XML文档. SAX(Simple API for XML): 特点:自上往下顺序解析 优点:[占用内存小,解析速度

XML学习笔记(二):使用 DOM和SAX 解析XML :

一.XML解析的简介 1.一般来说xml解析的方式有两种,Dom与SAX,且各有优缺点.pull是第三种方法见:pull解析XML 1)DOM:dom对象树 ①.整个XML放入内存,转换为Document对象: ②.每个元素,转换成Element对象 ③.文本,转换成Text对象 ④.属性,转换成Attribute对象 优缺点:元素的CRUD比较简单,但是内存消耗大,大的xml文档不适合. 补充:内存不足时,可以修改参数,调整JVM的内存大小 1.java.lang.OutOfMemoryErr

DOM和SAX解析XML的区别

解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DOM和SAX的不同:     1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中.从而消耗很大的内存空间.而SAX是基于事件的.当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间.     2. DOM可以读取XML也可以向XM

XML - 十分钟了解XML结构以及DOM和SAX解析方式

引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角.只是个人一直觉得主要的技术和思想是放之四海而皆准的,很多技术未必须要我们从头到尾再研究一遍.我们要做的就是站在巨人的肩膀上.利用其成果来为人们的需求服务. 随着移动互联网时代的大潮.越来越多的App不光是须要和网络server进行数据传输和交互,也须要和其它 App 进行数据

使用java自带的xml解析器解析xml

使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的handler处理类,而Dom解析可以写通用的方法(前提是要写出通用逻辑)来处理,开发比较快.下面上代码 1 //------------------ main point --------------------- 2 javax.xml.parsers.SAXParserFactory 3 publ

Android解析XML之SAX解析器

SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为. SAX解析器的优点是解析速度快,占用内存少.非常适合在Android移动设备中使用. SAX相关类及API DefaultHandler:是一个事

iOS开发中XML的DOM和SAX解析方法

一.介绍 dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文件.xml文件很大时,建立的“树”也会大,所以会大量占用内存. sax解析器核心是事件处理机制.例如解析器发现一个标记的开始标记时,将所发现的数据会封装为一个标记开始事件,并把这个报告给事件处理器,事件处理器再调用方法(startElement)处理发现的数据.下面我们尝试一下SAX和DOM解析:

XML技术之SAX解析器

1.解析XML文件有三种解析方法:DOM SAX DOM4J. 2.首先SAX解析技术只能读取XML文档中的数据信息,不能对其文档中的数据进行添加,删除,修改操作:这就是SAX解析技术的一个缺陷. 3.SAX解析器中可以定义多个事件处理器对象. SAX解析技术原理图: //使用SAX技术解析XML文件的步骤?    public static void saxXml() throws Exception{        //第一步:调用SAXParserFactory.newInstance()

JAVA Apache POI 之sax 解析10万级大数量数据

第一步让我们来看看我们的大量数据的excel 文件 好的下面第二步看一下代码: package com.chinait.utils; /** * 写这个东西主要是最近做了一个联通的数据迁移工作,他们就是这样导出的数据,所以我们写了这个代码. * 还有一个就是网上n 多都是半成品,代码不能直接运行,我这个代码能够直接运行. * java poi 之sax 解析10万级大数量数据,其实百万,千万都是可以的, * 但是想到这么大的数据一般不会使用excel 进行导入数据的行为,所以我采用了这个方法只是